*** empty log message ***

This commit is contained in:
David Rose 2001-02-16 05:08:43 +00:00
parent 5259b71393
commit 032f773b53
6 changed files with 111 additions and 6 deletions

View File

@ -1347,10 +1347,12 @@ make_node(EggGroup *egg_group, NamedNode *parent) {
make_node(*ci, node);
}
} else if (egg_group->get_model_flag()) {
// A model flag; create a model node.
} else if (egg_group->get_model_flag() || egg_group->get_dcs_flag()) {
// A model or DCS flag; create a model node.
node = new ModelNode;
node->set_name(egg_group->get_name());
DCAST(ModelNode, node)->set_preserve_transform(egg_group->get_dcs_flag());
EggGroup::const_iterator ci;
for (ci = egg_group->begin(); ci != egg_group->end(); ++ci) {

View File

@ -19,9 +19,10 @@ static const unsigned short _bam_major_ver = 3;
// Bumped to major version 2 on 7/6/00 due to major changes in Character.
// Bumped to major version 3 on 12/8/00 to change float64's to float32's.
static const unsigned short _bam_minor_ver = 1;
static const unsigned short _bam_minor_ver = 2;
// Bumped to minor version 1 on 12/15/00 to add FFT-style channel
// compression.
// Bumped to minor version 2 on 2/15/01 to add ModelNode::_preserve_transform.
#endif

View File

@ -28,10 +28,11 @@
// geometry is *not* coplanar with the base geometry.
////////////////////////////////////////////////////////////////////
class EXPCL_PANDA DecalTransition : public OnOffTransition {
public:
PUBLISHED:
INLINE DecalTransition();
INLINE static DecalTransition off();
public:
virtual NodeTransition *make_copy() const;
virtual NodeAttribute *make_attrib() const;

View File

@ -3,6 +3,7 @@
//
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
// Function: ModelNode::Constructor
// Access: Public
@ -12,6 +13,32 @@ INLINE ModelNode::
ModelNode(const string &name) :
NamedNode(name)
{
_preserve_transform = false;
}
////////////////////////////////////////////////////////////////////
// Function: ModelNode::set_preserve_transform
// Access: Public
// Description: Sets the preserve_transform flag. When this flag is
// true, flattening the scene graph will not flatten out
// any transformation assigned above this node;
// otherwise, any transforms applying to this node may
// or may not be flattened.
////////////////////////////////////////////////////////////////////
INLINE void ModelNode::
set_preserve_transform(bool preserve_transform) {
_preserve_transform = preserve_transform;
}
////////////////////////////////////////////////////////////////////
// Function: ModelNode::get_preserve_transform
// Access: Public
// Description: Returns the current setting of the preserve_transform
// flag. See set_preserve_transform().
////////////////////////////////////////////////////////////////////
INLINE bool ModelNode::
get_preserve_transform() const {
return _preserve_transform;
}
////////////////////////////////////////////////////////////////////
@ -21,7 +48,8 @@ ModelNode(const string &name) :
////////////////////////////////////////////////////////////////////
INLINE ModelNode::
ModelNode(const ModelNode &copy) :
NamedNode(copy)
NamedNode(copy),
_preserve_transform(copy._preserve_transform)
{
}
@ -33,4 +61,5 @@ ModelNode(const ModelNode &copy) :
INLINE void ModelNode::
operator = (const ModelNode &copy) {
NamedNode::operator = (copy);
_preserve_transform = copy._preserve_transform;
}

View File

@ -25,6 +25,33 @@ make_copy() const {
return new ModelNode(*this);
}
////////////////////////////////////////////////////////////////////
// Function: ModelNode::safe_to_flatten
// Access: Public, Virtual
// Description: Returns true if it is generally safe to flatten out
// this particular kind of Node by duplicating
// instances, false otherwise (for instance, a Camera
// cannot be safely flattened, because the Camera
// pointer itself is meaningful).
////////////////////////////////////////////////////////////////////
bool ModelNode::
safe_to_flatten() const {
return false;
}
////////////////////////////////////////////////////////////////////
// Function: ModelNode::safe_to_transform
// Access: Public, Virtual
// Description: Returns true if it is generally safe to transform
// this particular kind of Node by calling the xform()
// method, false otherwise. For instance, it's usually
// a bad idea to attempt to xform a Character.
////////////////////////////////////////////////////////////////////
bool ModelNode::
safe_to_transform() const {
return !_preserve_transform;
}
////////////////////////////////////////////////////////////////////
// Function: ModelNode::register_with_factory
// Access: Public, Static
@ -52,3 +79,37 @@ make_ModelNode(const FactoryParams &params) {
me->fillin(scan, manager);
return me;
}
////////////////////////////////////////////////////////////////////
// Function: ModelNode::write_datagram
// Access: Public, Virtual
// Description: Function to write the important information in
// the particular object to a Datagram
////////////////////////////////////////////////////////////////////
void ModelNode::
write_datagram(BamWriter *manager, Datagram &me) {
NamedNode::write_datagram(manager, me);
me.add_bool(_preserve_transform);
}
////////////////////////////////////////////////////////////////////
// Function: ModelNode::fillin
// Access: Protected
// Description: Function that reads out of the datagram (or asks
// manager to read) all of the data that is needed to
// re-create this object and stores it in the appropiate
// place
////////////////////////////////////////////////////////////////////
void ModelNode::
fillin(DatagramIterator &scan, BamReader *manager) {
NamedNode::fillin(scan, manager);
if (manager->get_file_minor_ver() < 2) {
// No _preserve_transform before bams 3.2.
_preserve_transform = false;
} else {
_preserve_transform = scan.get_bool();
}
}

View File

@ -26,18 +26,29 @@ class EXPCL_PANDA ModelNode : public NamedNode {
PUBLISHED:
INLINE ModelNode(const string &name = "");
INLINE void set_preserve_transform(bool preserve_transform);
INLINE bool get_preserve_transform() const;
public:
INLINE ModelNode(const ModelNode &copy);
INLINE void operator = (const ModelNode &copy);
virtual Node *make_copy() const;
virtual bool safe_to_flatten() const;
virtual bool safe_to_transform() const;
public:
static void register_with_read_factory(void);
protected:
virtual void write_datagram(BamWriter *manager, Datagram &me);
void fillin(DatagramIterator &scan, BamReader *manager);
static TypedWriteable *make_ModelNode(const FactoryParams &params);
private:
bool _preserve_transform;
public:
static TypeHandle get_class_type() {
return _type_handle;