Browse Source

add external_index

David Rose 23 năm trước cách đây
mục cha
commit
324eb3c262
3 tập tin đã thay đổi với 40 bổ sung0 xóa
  1. 30 0
      panda/src/egg/eggVertex.I
  2. 6 0
      panda/src/egg/eggVertex.cxx
  3. 4 0
      panda/src/egg/eggVertex.h

+ 30 - 0
panda/src/egg/eggVertex.I

@@ -175,6 +175,36 @@ get_index() const {
   return _index;
 }
 
+////////////////////////////////////////////////////////////////////
+//     Function: EggVertex::set_external_index
+//       Access: Public
+//  Description: Sets a special index number that is associated with
+//               the EggVertex (but is not written to the egg file).
+//               This number is not interpreted by any egg code; it is
+//               simply maintained along with the vertex.  It *is*
+//               used to differentiate otherwise identical vertices in
+//               EggVertexPool::create_unique_vertex(), however.
+//
+//               The intention of this number is as an aid for file
+//               converters, to associate an EggVertex back to the
+//               index number of the original source vertex.
+////////////////////////////////////////////////////////////////////
+INLINE void EggVertex::
+set_external_index(int external_index) {
+  _external_index = external_index;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: EggVertex::get_external_index
+//       Access: Public
+//  Description: Returns the number set by set_external_index().  See
+//               set_external_index().
+////////////////////////////////////////////////////////////////////
+INLINE int EggVertex::
+get_external_index() const {
+  return _external_index;
+}
+
 
 ////////////////////////////////////////////////////////////////////
 //     Function: EggVertex::gref_begin

+ 6 - 0
panda/src/egg/eggVertex.cxx

@@ -43,6 +43,7 @@ EggVertex::
 EggVertex() {
   _pool = NULL;
   _index = -1;
+  _external_index = -1;
   set_pos(LPoint3d(0.0, 0.0, 0.0));
   test_pref_integrity();
   test_gref_integrity();
@@ -58,6 +59,7 @@ EggVertex::
 EggVertex(const EggVertex &copy)
   : EggObject(copy), EggAttributes(copy),
     _dxyzs(copy._dxyzs),
+    _external_index(copy._external_index),
     _pos(copy._pos),
     _num_dimensions(copy._num_dimensions)
 {
@@ -78,6 +80,7 @@ EggVertex &EggVertex::
 operator = (const EggVertex &copy) {
   EggObject::operator = (copy);
   EggAttributes::operator = (copy);
+  _external_index = copy._external_index;
   _pos = copy._pos;
   _num_dimensions = copy._num_dimensions;
   _dxyzs = copy._dxyzs;
@@ -205,6 +208,9 @@ write(ostream &out, int indent_level) const {
 ////////////////////////////////////////////////////////////////////
 bool EggVertex::
 sorts_less_than(const EggVertex &other) const {
+  if (_external_index != other._external_index) {
+    return _external_index < other._external_index;
+  }
   if (_num_dimensions != other._num_dimensions) {
     return _num_dimensions < other._num_dimensions;
   }

+ 4 - 0
panda/src/egg/eggVertex.h

@@ -73,6 +73,9 @@ public:
 
   INLINE int get_index() const;
 
+  INLINE void set_external_index(int external_index);
+  INLINE int get_external_index() const;
+
   void write(ostream &out, int indent_level) const;
   bool sorts_less_than(const EggVertex &other) const;
 
@@ -109,6 +112,7 @@ public:
 private:
   EggVertexPool *_pool;
   int _index;
+  int _external_index;
   LPoint4d _pos;
   short _num_dimensions;
   GroupRef _gref;