Browse Source

maya: Allow more than three eggObjectTypes in a Maya model

Closes #1134
Daniel 4 years ago
parent
commit
73a2d29c39
2 changed files with 32 additions and 42 deletions
  1. 15 35
      pandatool/src/maya/eggObjectFlags.mel
  2. 17 7
      pandatool/src/mayaegg/mayaNodeTree.cxx

+ 15 - 35
pandatool/src/maya/eggObjectFlags.mel

@@ -1,6 +1,6 @@
 //
-// This is a sample mel script to flag a Maya node with one, two, or
-// three eggObjectTypes* attributes.  These attributes are used to tag
+// This is a sample mel script to flag a Maya node with at least
+// one eggObjectTypes* attribute.  These attributes are used to tag
 // geometry with special meaning to Panda.  There are a handful of
 // attribute values that are predefined within Panda, but you can also
 // make up your own attribute values, and define an arbitrary egg
@@ -28,42 +28,22 @@
 // direct/src/configfiles/direct.prc.pp for examples of this.
 //
 
-global proc eggObjectFlags()
-{       
-string $sel[] =`ls -sl`;
-for ($i in $sel)
-  {
-  string $attrName = "eggObjectTypes";
+global proc eggObjectFlags() {
+  string $sel[] =`ls -sl`;
 
   // Modify this line as needed to add your own object types.
   string $eggFlags = "none:portal:polylight:seq24:seq12:indexed:model:dcs:barrier:sphere:tube:trigger:trigger-sphere:bubble:ghost:keep-all-uvsets";
-  
-  string $object = ($i + ".eggObjectTypes");
-  
-    if( `objExists ($object + "1")` ) 
-    {
-    
-      if( `objExists ($object + "2")` ) 
-      {
-      
-        if( `objExists ($object + "3")` ) 
-        {
-        warning("No More Egg Object Types Supported");
-        } 
-         else 
-        {
-        addAttr -ln ($attrName + "3") -k 1 -at "enum" -en ($eggFlags)  $i;
-        }
-      
-      } 
-       else 
-      {
-      addAttr -ln ($attrName + "2") -k 1 -at "enum" -en ($eggFlags)  $i;
-      }
-    } 
-     else 
-    {
-    addAttr -ln ($attrName + "1") -k 1 -at "enum" -en ($eggFlags)  $i;
+
+  for ($i in $sel) {
+    string $attrName = "eggObjectTypes";
+    string $object = ($i + "." + $attrName);
+
+    int $num = 1;
+
+    while (`objExists ($object + $num)`) {
+      $num++;
     }
+
+    addAttr -ln ($attrName + $num) -k 1 -at "enum" -en ($eggFlags) $i;
   }
 }

+ 17 - 7
pandatool/src/mayaegg/mayaNodeTree.cxx

@@ -32,6 +32,8 @@
 #include <maya/MGlobal.h>
 #include "post_maya_include.h"
 
+#include <sstream>
+
 using std::string;
 
 /**
@@ -341,13 +343,21 @@ get_egg_group(MayaNodeDesc *node_desc) {
       MObject dag_object = node_desc->get_dag_path().node();
       string object_type;
       LVector3d value;
-      if (get_enum_attribute(dag_object, "eggObjectTypes1", object_type)) {
-        egg_group->add_object_type(object_type);
-      }
-      if (get_enum_attribute(dag_object, "eggObjectTypes2", object_type)) {
-        egg_group->add_object_type(object_type);
-      }
-      if (get_enum_attribute(dag_object, "eggObjectTypes3", object_type)) {
+
+      for (unsigned int i = 1; ; i++) {
+        std::ostringstream attr;
+        attr << "eggObjectTypes" << i;
+
+        if (!get_enum_attribute(dag_object, attr.str(), object_type)) {
+          if (i < 3) {
+            // Support out-of-order legacy object types.
+            continue;
+          }
+
+          // We have run out of object types to add.
+          break;
+        }
+
         egg_group->add_object_type(object_type);
       }