Преглед изворни кода

Mader MayaConveter more generic

Gyedo Jeon пре 15 година
родитељ
комит
2bef5c7c49

+ 4 - 5
direct/src/leveleditor/LevelEditorBase.py

@@ -290,17 +290,16 @@ class LevelEditorBase(DirectObject):
         except:
             pass
 
-
-    def convertMaya(self, modelname, obj=None, isAnim=False):
+    def convertMaya(self, modelname, callBack, obj=None, isAnim=False):
         if obj and isAnim:
-            mayaConverter = MayaConverter(self.ui, self, modelname, obj, isAnim)
+            mayaConverter = MayaConverter(self.ui, self, modelname, callBack, obj, isAnim)
         else:
             reply = wx.MessageBox("Is it an animation file?", "Animation?",
                               wx.YES_NO | wx.ICON_QUESTION)
             if reply == wx.YES:
-                mayaConverter = MayaConverter(self.ui, self, modelname, None, True)
+                mayaConverter = MayaConverter(self.ui, self, modelname, callBack, None, True)
             else:        
-                mayaConverter = MayaConverter(self.ui, self, modelname, None, False)
+                mayaConverter = MayaConverter(self.ui, self, modelname, callBack, None, False)
         mayaConverter.Show()
 
     def updateStatusReadout(self, status, color=None):

+ 7 - 9
direct/src/leveleditor/MayaConverter.py

@@ -1,7 +1,7 @@
 from direct.wxwidgets.WxAppShell import *
 import os, re, shutil
 
-from ObjectPaletteBase import *
+import ObjectGlobals as OG
 
 CLOSE_STDIN = "<CLOSE STDIN>"
 
@@ -70,13 +70,14 @@ class Process:
                 return 1, None
 
 class MayaConverter(wx.Dialog):
-    def __init__(self, parent, editor, mayaFile, obj = None, isAnim=False):
+    def __init__(self, parent, editor, mayaFile, callBack=None, obj=None, isAnim=False):
         wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title="Maya Converter",
                            pos=wx.DefaultPosition, size=(300, 200))
 
         self.editor = editor
         self.obj = obj
         self.isAnim = isAnim
+        self.callBack = callBack
 
         self.mainPanel = wx.Panel(self, -1)
         sizer = wx.BoxSizer(wx.VERTICAL)
@@ -141,14 +142,11 @@ class MayaConverter(wx.Dialog):
             else:
                 modelName = "%s.model.egg"%mayaFile
                 animName = "%s.anim.egg"%mayaFile
-                itemData = ObjectBase(name=name, model=modelName, anims=[animName], actor=True)
+                result = [name, modelName, animName]
         else:
             modelName = "%s.egg"%mayaFile
-            itemData = ObjectBase(name=name, model=modelName, actor=False)
+            result = [name, modelName]
 
-        self.editor.protoPalette.add(itemData)
-
-        newItem = self.editor.ui.protoPaletteUI.tree.AppendItem(self.editor.ui.protoPaletteUI.tree.root, name)
-        self.editor.ui.protoPaletteUI.tree.SetItemPyData(newItem, itemData)
-        self.editor.ui.protoPaletteUI.tree.ScrollTo(newItem)
+        if self.callBack:
+            self.callBack(result)
             

+ 8 - 0
direct/src/leveleditor/ObjectPaletteBase.py

@@ -101,6 +101,14 @@ class ObjectPaletteBase:
             return None
         return item
 
+    def findChildren(self, name):
+        result = []
+        for key in self.dataKeys:
+            if self.dataStruct[key] == name:
+                result.append(key)
+
+        return result
+
     def rename(self, oldName, newName):
         #import pdb;set_trace()
         if oldName == newName:

+ 10 - 9
direct/src/leveleditor/ObjectPropertyUI.py

@@ -31,7 +31,7 @@ class AnimFileDrop(wx.FileDropTarget):
             animName = Filename.fromOsSpecific(filename).getFullpath()
             if name.endswith('.mb') or\
                name.endswith('.ma'):
-                self.editor.convertMaya(animName, obj, isAnim=True)
+                self.editor.convertMaya(animName, self.editor.ui.protoPaletteUI.addNewItem, obj, isAnim=True)
                 return
 
             if animName not in objDef.anims:
@@ -50,10 +50,14 @@ class ObjectPropUI(wx.Panel):
     def __init__(self, parent, label):
         wx.Panel.__init__(self, parent)
         self.parent = parent
-        self.label = wx.StaticText(self, label=label)
+        self.labelPane = wx.Panel(self)
+        self.label = wx.StaticText(self.labelPane, label=label)
+        self.labelSizer = wx.BoxSizer(wx.HORIZONTAL)
+        self.labelSizer.Add(self.label)
+        self.labelPane.SetSizer(self.labelSizer)
         self.uiPane = wx.Panel(self)
         sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.label)
+        sizer.Add(self.labelPane)
         sizer.Add(self.uiPane, 1, wx.EXPAND, 0)
         self.SetSizer(sizer)
 
@@ -137,13 +141,10 @@ class ObjectPropUICombo(ObjectPropUI):
     def __init__(self, parent, label, value, valueList, obj=None, callBack=None):
         ObjectPropUI.__init__(self, parent, label)
         self.ui = wx.Choice(self.uiPane, -1, choices=valueList)
-        sizer = wx.BoxSizer(wx.VERTICAL)
         if callBack is not None:
-            button = wx.Button(self.uiPane, -1, 'Update')
+            button = wx.Button(self.labelPane, -1, 'Update', size = (100, 18))
             button.Bind(wx.EVT_BUTTON, lambda p0=None, p1=obj, p2=self: callBack(p0, p1, p2))
-            sizer.Add(button)
-        sizer.Add(self.ui, 1, wx.EXPAND, 0)
-        self.uiPane.SetSizer(sizer)
+            self.labelSizer.Add(button)
         self.setValue(value)
         self.eventType = wx.EVT_CHOICE
         self.Layout()
@@ -344,7 +345,7 @@ class ObjectPropertyUI(ScrolledPanel):
         animList = objDef.animDict.get(obj[OG.OBJ_MODEL])
         if len(objDef.anims) > 0 or animList:
             if animList is None:
-                animist = objDef.anims
+                animList = objDef.anims
                 
             propUI = ObjectPropUICombo(self.lookPane, 'anim', obj[OG.OBJ_ANIM], animList)
             sizer.Add(propUI)            

+ 6 - 3
direct/src/leveleditor/PaletteTreeCtrl.py

@@ -94,12 +94,15 @@ class PaletteTreeCtrl(wx.TreeCtrl):
         self.Expand(self.GetRootItem())
         self.ScrollTo(newItem)
 
-    def DeleteSelected(self):
-        item = self.GetSelection()
+    def DeleteItem(self, item):
         itemText = self.GetItemText(item)
         if item and itemText != self.rootName:
            self.Delete(item)
-           self.paletteUI.palette.delete(itemText)
+           self.paletteUI.palette.delete(itemText)        
+
+    def DeleteSelected(self):
+        item = self.GetSelection()
+        self.DeleteItem(item)
 
     def ReParent(self, parent, newParent):
         # main loop - iterating over item's children

+ 1 - 1
direct/src/leveleditor/ProtoPaletteBase.py

@@ -48,7 +48,7 @@ class ProtoPaletteBase(ObjectPaletteBase):
 
         for key in self.data.keys():
             if isinstance(self.data[key], ObjectBase):
-               f.write("\t'%s':ObjectBase(name='%s', model='%s', anims=%s, actor=True),\n"%(key, self.data[key].name, self.data[key].model, self.data[key].anims))
+               f.write("\t'%s':ObjectBase(name='%s', model='%s', anims=%s, actor=%s),\n"%(key, self.data[key].name, self.data[key].model, self.data[key].anims, self.data[key].actor))
             else:
                f.write("\t'%s':ObjectGen(name='%s'),\n"%(key, self.data[key].name))
 

+ 15 - 8
direct/src/leveleditor/ProtoPaletteUI.py

@@ -163,20 +163,27 @@ class ProtoPaletteUI(wx.Panel):
         name = os.path.basename(filename)
         
         if self.editor.protoPalette.findItem(name):
-           print 'This model already exists in ProtoPalette!'
-           return
+           item = self.tree.traverse(self.tree.root, name)
+           if item:
+              self.tree.DeleteItem(item)
         
         modelname = Filename.fromOsSpecific(filename).getFullpath()
         if modelname.endswith('.mb') or\
            modelname.endswith('.ma'):
-            self.editor.convertMaya(modelname)
+            self.editor.convertMaya(modelname, self.addNewItem)
             return
-        itemData = ObjectBase(name=name, model=modelname, actor=True)
-        self.editor.protoPalette.add(itemData)
 
-        newItem = self.tree.AppendItem(self.editor.ui.protoPaletteUI.tree.root, name)
-        self.tree.SetItemPyData(newItem, itemData)
-        self.tree.ScrollTo(newItem)
+    def addNewItem(self, result):
+       if len(result) == 2:
+          itemData = ObjectBase(name=result[0], model=result[1], actor=False)          
+       elif len(result) == 3:
+          itemData = ObjectBase(name=result[0], model=result[1], anims=[result[2]], actor=True)
+       else:
+          return
+       self.palette.add(itemData)
+       newItem = self.tree.AppendItem(self.tree.root, itemData.name)
+       self.tree.SetItemPyData(newItem, itemData)
+       self.tree.ScrollTo(newItem)
 
     def compareItems(self, item1, item2):
         data1 = self.tree.GetItemText(item1)