Panda3D
Loading...
Searching...
No Matches
bamToEgg.cxx
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file bamToEgg.cxx
10 * @author drose
11 * @date 2001-06-25
12 */
13
14#include "bamToEgg.h"
15#include "save_egg_file.h"
16#include "string_utils.h"
17#include "bamFile.h"
18#include "bamCacheRecord.h"
19
20/**
21 *
22 */
23BamToEgg::
24BamToEgg() :
25 SomethingToEgg("bam", ".bam")
26{
27 set_program_brief("convert a native Panda .bam file to an .egg file");
28 set_program_description
29 ("This program converts native Panda bam files to egg. The conversion "
30 "is somewhat incomplete; running egg2bam followed by bam2egg should not "
31 "be expected to yield the same egg file you started with.");
32
33 redescribe_option
34 ("cs",
35 "Specify the coordinate system of the input " + _format_name +
36 " file. By default, this is taken from the Config.prc file, which "
37 "is currently " + format_string(get_default_coordinate_system()) + ".");
38
39 _coordinate_system = get_default_coordinate_system();
40}
41
42/**
43 *
44 */
45void BamToEgg::
46run() {
47 BamFile bam_file;
48
49 if (!bam_file.open_read(_input_filename)) {
50 nout << "Unable to read " << _input_filename << "\n";
51 exit(1);
52 }
53
54 nout << _input_filename << " : Bam version "
55 << bam_file.get_file_major_ver() << "."
56 << bam_file.get_file_minor_ver() << "\n";
57
58 typedef pvector<TypedWritable *> Objects;
59 Objects objects;
60 TypedWritable *object = bam_file.read_object();
61
62 if (object != nullptr &&
63 object->is_exact_type(BamCacheRecord::get_class_type())) {
64 // Here's a special case: if the first object in the file is a
65 // BamCacheRecord, it's really a cache data file and not a true bam file;
66 // but skip over the cache data record and let the user treat it like an
67 // ordinary bam file.
68 object = bam_file.read_object();
69 }
70
71 while (object != nullptr || !bam_file.is_eof()) {
72 if (object != nullptr) {
73 ReferenceCount *ref_ptr = object->as_reference_count();
74 if (ref_ptr != nullptr) {
75 ref_ptr->ref();
76 }
77 objects.push_back(object);
78 }
79 object = bam_file.read_object();
80 }
81 bam_file.resolve();
82 bam_file.close();
83
84 _data->set_coordinate_system(_coordinate_system);
85
86 if (objects.size() == 1 &&
87 objects[0]->is_of_type(PandaNode::get_class_type())) {
88 PandaNode *node = DCAST(PandaNode, objects[0]);
89 save_egg_data(_data, node);
90
91 } else {
92 nout << "File does not contain a scene graph.\n";
93 exit(1);
94 }
95
97}
98
99int main(int argc, char *argv[]) {
100 BamToEgg prog;
101 prog.parse_command_line(argc, argv);
102 prog.run();
103 return 0;
104}
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
The principle public interface to reading and writing Bam disk files.
Definition bamFile.h:41
void close()
Closes the input or output stream.
Definition bamFile.cxx:243
int get_file_minor_ver()
Returns the minor version number of the file currently being read, or the system current minor versio...
Definition bamFile.cxx:277
TypedWritable * read_object()
Reads and returns the next object from the Bam file, or NULL if the end of the file has been reached,...
Definition bamFile.cxx:85
int get_file_major_ver()
Returns the major version number of the file currently being read, or the system current major versio...
Definition bamFile.cxx:264
bool open_read(const Filename &bam_filename, bool report_errors=true)
Attempts to open the indicated filename for reading.
Definition bamFile.cxx:51
bool resolve()
This must be called after one or more objects have been read via calls to read_object() in order to r...
Definition bamFile.cxx:110
bool is_eof() const
Returns true if the reader has reached end-of-file, false otherwise.
Definition bamFile.cxx:98
This program reads a bam file, for instance as written out from a real-time interaction session,...
Definition bamToEgg.h:25
void write_egg_file()
Writes out the egg file as the normal result of the program.
A basic node of the scene graph or data graph.
Definition pandaNode.h:65
virtual void parse_command_line(int argc, char **argv)
Dispatches on each of the options on the command line, and passes the remaining parameters to handle_...
A base class for all things that want to be reference-counted.
void ref() const
Explicitly increments the reference count.
This is the general base class for a file-converter program that reads some model file format and gen...
bool is_exact_type(TypeHandle handle) const
Returns true if the current object is the indicated type exactly.
Definition typedObject.I:38
Base class for objects that can be written to and read from Bam files.
This is our own Panda specialization on the default STL vector.
Definition pvector.h:42
bool save_egg_data(EggData *data, PandaNode *node)
Another convenience function; works like save_egg_file() but populates an EggData instead of writing ...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.