def centerOnObject(self, *args):
   selectedObject = modelController.getSelectedObject()
   if selectedObject.hasNodepath():
     pos = selectedObject.getNodepath().getPos(render)
   else:
     pos = selectedObject.getParentNodepath().getPos(render)
   cameraController.setPivotPos(pos)
Esempio n. 2
0
 def centerOnObject(self, *args):
     selectedObject = modelController.getSelectedObject()
     if selectedObject.hasNodepath():
         pos = selectedObject.getNodepath().getPos(render)
     else:
         pos = selectedObject.getParentNodepath().getPos(render)
     cameraController.setPivotPos(pos)
Esempio n. 3
0
 def duplicateModelWrapper(self):
     originalModel = modelController.getSelectedObject()
     objectInstance = originalModel.duplicate(originalModel)
     if objectInstance is not None:
         objectInstance.setEditmodeEnabled()
     #objectInstance.loadFromData( originalModel.getSaveData('.') )
     messenger.send(EVENT_SCENEGRAPH_REFRESH)
     modelController.selectObject(objectInstance)
 def duplicateModelWrapper(self):
   originalModel = modelController.getSelectedObject()
   objectInstance = originalModel.duplicate(originalModel)
   if objectInstance is not None:
     objectInstance.setEditmodeEnabled()
   #objectInstance.loadFromData( originalModel.getSaveData('.') )
   messenger.send( EVENT_SCENEGRAPH_REFRESH )
   modelController.selectObject( objectInstance )
 def createEggWrapper(self, type):
   # create the actual wrapper of the object
   module = __import__("core.modules.pNodePathWrapper.p%s" % type, globals(), locals(), [type], -1)
   modelParent = modelController.getSelectedObject()
   objectInstance = getattr(module, type).onCreateInstance(modelParent)
   if objectInstance is not None:
     objectInstance.setEditmodeEnabled()
   messenger.send(EVENT_SCENEGRAPH_REFRESH)
   modelController.selectObject(objectInstance)
Esempio n. 6
0
 def createEggWrapper(self, type):
     # create the actual wrapper of the object
     module = __import__("core.modules.pNodePathWrapper.p%s" % type,
                         globals(), locals(), [type], -1)
     modelParent = modelController.getSelectedObject()
     objectInstance = getattr(module, type).onCreateInstance(modelParent)
     if objectInstance is not None:
         objectInstance.setEditmodeEnabled()
     messenger.send(EVENT_SCENEGRAPH_REFRESH)
     modelController.selectObject(objectInstance)
 def onCreateFilebrowserModelWrapper(self, objectType, filepath):
   if filepath != None and filepath != '' and filepath != ' ':
     filepath = Filename.fromOsSpecific(filepath).getFullpath()
     modelParent = modelController.getSelectedObject()
     module = __import__("core.modules.p%s" % objectType, globals(), locals(), [objectType], -1)
     objectInstance = getattr(module, objectType).onCreateInstance(modelParent, filepath)
     if objectInstance is not None:
       objectInstance.setEditmodeEnabled()
     messenger.send(EVENT_SCENEGRAPH_REFRESH)
     modelController.selectObject(objectInstance)
Esempio n. 8
0
    def onCreateObject(self, e):
        """Invoked when the user hits one of the buttons in the "Create" menu."""

        modelParent = modelController.getSelectedObject()
        if modelParent == None: modelParent = render
        objectInstance = None
        if e.Id == ID_NODEPATH:
            objectInstance = NodePathWrapper.onCreateInstance(modelParent)
        elif e.Id == ID_MODEL:
            filter = "Panda3D Egg Format (*.egg)|*.[eE][gG][gG];*.egg"
            filter += "|Panda3D Binary Format (*.bam)|*.[bB][aA][mM];*.bam"
            filter += "|MultiGen (*.flt)|*.[fF][lL][tT];*.flt"
            filter += "|Lightwave (*.lwo)|*.[lL][wW][oO];*.lwo"
            filter += "|AutoCAD (*.dxf)|*.[dD][xX][fF];*.dxf"
            filter += "|VRML (*.wrl)|*.[wW][rR][lL];*.wrl"
            filter += "|DirectX (*.x)|*.[xX];*.x"
            filter += "|COLLADA (*.dae)|*.[dD][aA][eE];*.dae"
            dlg = wx.FileDialog(self, "Select model", "", "", filter, wx.OPEN)
            try:
                if dlg.ShowModal() == wx.ID_OK:
                    objectInstance = NodePathWrapper.onCreateInstance(
                        modelParent,
                        Filename.fromOsSpecific(dlg.GetPath()).getFullpath())
            finally:
                dlg.Destroy()
        elif e.Id == ID_TERRAIN:
            filter = "Portable Network Graphics (*.png)|*.[pP][nN][gG];*.png"
            dlg = wx.FileDialog(self, "Select heightfield", "", "", filter,
                                wx.OPEN)
            try:
                if dlg.ShowModal() == wx.ID_OK:
                    objectInstance = GeoMipTerrainNodeWrapper.onCreateInstance(
                        modelParent,
                        Filename.fromOsSpecific(dlg.GetPath()).getFullpath())
            finally:
                dlg.Destroy()
        elif e.Id == ID_AMBIENT:
            objectInstance = AmbientLightNodeWrapper.onCreateInstance(
                modelParent)
        elif e.Id == ID_DIRECTIONAL:
            objectInstance = DirectionalLightNodeWrapper.onCreateInstance(
                modelParent)
        elif e.Id == ID_POINT:
            objectInstance = PointLightNodeWrapper.onCreateInstance(
                modelParent)
        elif e.Id == ID_SPOT:
            objectInstance = SpotLightNodeWrapper.onCreateInstance(modelParent)

        if objectInstance != None:
            objectInstance.reparentTo(modelParent)
            objectInstance.enableEditmode()
            modelController.selectObject(objectInstance)
            messenger.send(EVENT_SCENEGRAPH_REFRESH)
Esempio n. 9
0
 def onCreateFilebrowserModelWrapper(self, objectType, filepath):
     if filepath != None and filepath != '' and filepath != ' ':
         filepath = Filename.fromOsSpecific(filepath).getFullpath()
         modelParent = modelController.getSelectedObject()
         module = __import__("core.modules.p%s" % objectType, globals(),
                             locals(), [objectType], -1)
         objectInstance = getattr(module, objectType).onCreateInstance(
             modelParent, filepath)
         if objectInstance is not None:
             objectInstance.setEditmodeEnabled()
         messenger.send(EVENT_SCENEGRAPH_REFRESH)
         modelController.selectObject(objectInstance)
Esempio n. 10
0
 def onCreateObject(self, e):
   """Invoked when the user hits one of the buttons in the "Create" menu."""
   
   modelParent = modelController.getSelectedObject() 
   if modelParent == None: modelParent = render
   objectInstance = None
   if e.Id == ID_NODEPATH:
     objectInstance = NodePathWrapper.onCreateInstance(modelParent)
   elif e.Id == ID_MODEL:
     filter = "Panda3D Egg Format (*.egg)|*.[eE][gG][gG];*.egg"
     filter += "|Panda3D Binary Format (*.bam)|*.[bB][aA][mM];*.bam"
     filter += "|MultiGen (*.flt)|*.[fF][lL][tT];*.flt"
     filter += "|Lightwave (*.lwo)|*.[lL][wW][oO];*.lwo"
     filter += "|AutoCAD (*.dxf)|*.[dD][xX][fF];*.dxf"
     filter += "|VRML (*.wrl)|*.[wW][rR][lL];*.wrl"
     filter += "|DirectX (*.x)|*.[xX];*.x"
     filter += "|COLLADA (*.dae)|*.[dD][aA][eE];*.dae"
     dlg = wx.FileDialog(self, "Select model", "", "", filter, wx.OPEN)
     try:
       if dlg.ShowModal() == wx.ID_OK:
         objectInstance = NodePathWrapper.onCreateInstance(modelParent, Filename.fromOsSpecific(dlg.GetPath()).getFullpath())
     finally:
       dlg.Destroy()
   elif e.Id == ID_TERRAIN:
     filter = "Portable Network Graphics (*.png)|*.[pP][nN][gG];*.png"
     dlg = wx.FileDialog(self, "Select heightfield", "", "", filter, wx.OPEN)
     try:
       if dlg.ShowModal() == wx.ID_OK:
         objectInstance = GeoMipTerrainNodeWrapper.onCreateInstance(modelParent, Filename.fromOsSpecific(dlg.GetPath()).getFullpath())
     finally:
       dlg.Destroy()
   elif e.Id == ID_AMBIENT:
     objectInstance = AmbientLightNodeWrapper.onCreateInstance(modelParent)
   elif e.Id == ID_DIRECTIONAL:
     objectInstance = DirectionalLightNodeWrapper.onCreateInstance(modelParent)
   elif e.Id == ID_POINT:
     objectInstance = PointLightNodeWrapper.onCreateInstance(modelParent)
   elif e.Id == ID_SPOT:
     objectInstance = SpotLightNodeWrapper.onCreateInstance(modelParent)
   
   if objectInstance != None:
     objectInstance.reparentTo(modelParent)
     objectInstance.enableEditmode() 
     modelController.selectObject(objectInstance)
     messenger.send(EVENT_SCENEGRAPH_REFRESH)
Esempio n. 11
0
    def destroyModel(self):
        selectedObject = modelController.getSelectedObject()
        if selectedObject is not None:
            if selectedObject == self.treeParent:
                print "W: core.EditorClass: should not destroy root object"
                return
            modelController.selectObject(None)

            MEMLEAK_CHECK = False
            if MEMLEAK_CHECK:
                tmp = [selectedObject]

            # delete recursively
            for object in selectedObject.getRecChildren():
                if MEMLEAK_CHECK:
                    tmp.append(object)
                object.destroy()
                del object

            selectedObject.destroy()
            del selectedObject

            # refresh the scenegraphbrowser
            messenger.send(EVENT_SCENEGRAPH_REFRESH)

            if MEMLEAK_CHECK:
                import gc
                gc.collect()
                gc.collect()
                for t in tmp:
                    print "W: EditorClass.destroyModel: MEMLEAK_CHECK"
                    print "  - type:          ", t.__class__.__name__
                    print "  - instance:      ", t
                    print "  - num references:", len(gc.get_referrers(t))
                    for ref in gc.get_referrers(t):
                        print "    -", ref
Esempio n. 12
0
 def destroyModel(self):
   selectedObject = modelController.getSelectedObject()
   if selectedObject is not None:
     if selectedObject == self.treeParent:
       print "W: core.EditorClass: should not destroy root object"
       return
     modelController.selectObject(None)
     
     MEMLEAK_CHECK = False
     if MEMLEAK_CHECK:
       tmp = [selectedObject]
     
     # delete recursively
     for object in selectedObject.getRecChildren():
       if MEMLEAK_CHECK:
         tmp.append(object)
       object.destroy()
       del object
     
     selectedObject.destroy()
     del selectedObject
     
     # refresh the scenegraphbrowser
     messenger.send(EVENT_SCENEGRAPH_REFRESH)
     
     if MEMLEAK_CHECK:
       import gc
       gc.collect()
       gc.collect()
       for t in tmp:
         print "W: EditorClass.destroyModel: MEMLEAK_CHECK"
         print "  - type:          ", t.__class__.__name__
         print "  - instance:      ", t
         print "  - num references:", len(gc.get_referrers(t))
         for ref in gc.get_referrers(t):
           print "    -", ref
Esempio n. 13
0
    def modelSelected(self, model):
        ''' is called when a object is selected
    creates a corresponding editing sidebar for the object
    '''
        if self.lastSelectedObject != modelController.getSelectedObject():
            # selected model has been changed
            if self.editorObjectGuiInstance is not None:
                # destroy gui instance of old object
                self.editorObjectGuiInstance.stopEdit()

            # save the object as the new object
            self.lastSelectedObject = modelController.getSelectedObject()

            if modelController.getSelectedObject() is not None:
                # update menubar for object
                self.menuBarGui.update()

                # create gui instance of new object
                objType = modelController.getSelectedObject().__class__
                # the codenode inherits from the real class we use...
                # but we need the name of the internal class,
                bases = list()
                for base in objType.__bases__:
                    bases.append(base.__name__)
                if 'CodeNodeWrapper' in bases:
                    objType = 'CodeNodeWrapper'
                else:
                    objType = objType.__name__
                module = __import__("dgui.modules.p%s" % objType, globals(),
                                    locals(), [objType], -1)
                try:
                    self.editorObjectGuiInstance = getattr(module, objType)(
                        modelController.getSelectedObject(), self)
                    self.editorObjectGuiInstance.startEdit()
                except TypeError:
                    print "E: dgui.EditorApp.modelSelected: object", objType, modelController.getSelectedObject(
                    )
                    traceback.print_exc()
            else:
                self.editorObjectGuiInstance = None
        else:
            # the same object is selected again
            pass
Esempio n. 14
0
 def modelSelected(self, model):
   ''' is called when a object is selected
   creates a corresponding editing sidebar for the object
   '''
   if self.lastSelectedObject != modelController.getSelectedObject():
     # selected model has been changed
     if self.editorObjectGuiInstance is not None:
       # destroy gui instance of old object
       self.editorObjectGuiInstance.stopEdit()
     
     # save the object as the new object
     self.lastSelectedObject = modelController.getSelectedObject()
     
     if modelController.getSelectedObject() is not None:
       # update menubar for object
       self.menuBarGui.update()
       
       # create gui instance of new object
       objType = modelController.getSelectedObject().__class__
       # the codenode inherits from the real class we use...
       # but we need the name of the internal class, 
       bases = list()
       for base in objType.__bases__:
         bases.append(base.__name__)
       if 'CodeNodeWrapper' in bases:
         objType = 'CodeNodeWrapper'
       else:
         objType = objType.__name__
       module = __import__("dgui.modules.p%s" % objType, globals(), locals(), [objType], -1)
       try:
         self.editorObjectGuiInstance = getattr(module, objType)(modelController.getSelectedObject(), self)
         self.editorObjectGuiInstance.startEdit()
       except TypeError:
         print "E: dgui.EditorApp.modelSelected: object", objType, modelController.getSelectedObject()
         traceback.print_exc()
     else:
       self.editorObjectGuiInstance = None
   else:
     # the same object is selected again
     pass
Esempio n. 15
0
    def create(self):
        selectedObject = modelController.getSelectedObject()
        possibleChildren = selectedObject.getPossibleChildren()
        possibleFunctions = selectedObject.getPossibleFunctions()

        nodeButtonDefinitions = list()
        if 'NodePathWrapper' in possibleChildren:
            nodeButtonDefinitions.append([
                'model', self.createFilebrowserModelWrapper,
                ['NodePathWrapper']
            ])
        if 'ParticleSystemWrapper' in possibleChildren:
            nodeButtonDefinitions.append([
                'particlesystem', self.createFilebrowserModelWrapper,
                ['ParticleSystemWrapper']
            ])
        if 'CodeNodeWrapper' in possibleChildren:
            nodeButtonDefinitions.append([
                'codeNode', self.createFilebrowserModelWrapper,
                ['CodeNodeWrapper']
            ])
        if 'GeoMipTerrainNodeWrapper' in possibleChildren:
            nodeButtonDefinitions.append([
                'GeoMipTerrain', self.createFilebrowserModelWrapper,
                ['GeoMipTerrainNodeWrapper']
            ])
        if 'SoundNodeWrapper' in possibleChildren:
            nodeButtonDefinitions.append([
                'sound', self.createFilebrowserModelWrapper,
                ['SoundNodeWrapper']
            ])
        if 'SceneNodeWrapper' in possibleChildren:
            nodeButtonDefinitions.append([
                'scene', self.createFilebrowserModelWrapper,
                ['SceneNodeWrapper']
            ])
        if 'ShaderWrapper' in possibleChildren:
            nodeButtonDefinitions.append(
                ['paintshader', self.createModelWrapper, ['ShaderWrapper']])
        if 'CurveNodeWrapper' in possibleChildren:
            nodeButtonDefinitions.append(
                ['curve', self.createModelWrapper, ['CurveNodeWrapper']])
        if 'CurveSurfaceNodeWrapper' in possibleChildren:
            nodeButtonDefinitions.append([
                'surfaceCurve', self.createModelWrapper,
                ['CurveSurfaceNodeWrapper']
            ])
        if 'AnimatedTextureWrapper' in possibleChildren:
            nodeButtonDefinitions.append([
                'animated texture', self.createModelWrapper,
                ['AnimatedTextureWrapper']
            ])

        if 'ObjectEggGroup' in possibleChildren:
            nodeButtonDefinitions.append(
                ['Egg Group', self.createEggWrapper, ['ObjectEggGroup']])
        if 'ObjectEggGroup' in possibleChildren:
            nodeButtonDefinitions.append(
                ['Egg Polygon', self.createEggWrapper, ['ObjectEggPolygon']])
        if 'ObjectEggGroup' in possibleChildren:
            nodeButtonDefinitions.append(
                ['Egg Texture', self.createEggWrapper, ['ObjectEggTexture']])
        if 'ObjectEggGroup' in possibleChildren:
            nodeButtonDefinitions.append([
                'Egg VertexPool', self.createEggWrapper,
                ['ObjectEggVertexPool']
            ])

        self.nodeButtons = self.createInterface(nodeButtonDefinitions,
                                                'nodes',
                                                align=ALIGN_RIGHT | ALIGN_TOP,
                                                pos=Vec3(-.85, 0, 0))

        lightButtonDefinitions = list()
        if 'SpotLightNodeWrapper' in possibleChildren:
            lightButtonDefinitions.append([
                'spotlight', self.createModelWrapper, ['SpotLightNodeWrapper']
            ])
        if 'DirectionalLightNodeWrapper' in possibleChildren:
            lightButtonDefinitions.append([
                'directionallight', self.createModelWrapper,
                ['DirectionalLightNodeWrapper']
            ])
        if 'AmbientLightNodeWrapper' in possibleChildren:
            lightButtonDefinitions.append([
                'ambientlight', self.createModelWrapper,
                ['AmbientLightNodeWrapper']
            ])
        if 'PointLightNodeWrapper' in possibleChildren:
            lightButtonDefinitions.append([
                'pointlight', self.createModelWrapper,
                ['PointLightNodeWrapper']
            ])
        self.lightButtons = self.createInterface(lightButtonDefinitions,
                                                 'lights',
                                                 align=ALIGN_RIGHT | ALIGN_TOP,
                                                 pos=Vec3(-.45, 0, 0))

        editButtonDefinitions = list()
        if 'destroy' in possibleFunctions:
            editButtonDefinitions.append([
                'destroy', self.guiEditorInstance.editorInstance.destroyModel,
                []
            ])
        if 'revert' in possibleFunctions:
            editButtonDefinitions.append(['revert', selectedObject.revert, []])
        if 'duplicate' in possibleFunctions:
            editButtonDefinitions.append(
                ['duplicate', self.duplicateModelWrapper, []])
        if 'save' in possibleFunctions:
            editButtonDefinitions.append(['save', selectedObject.save, []])
        if 'saveAs' in possibleFunctions:
            editButtonDefinitions.append(
                ['saveAs', self.saveAsFile, [selectedObject]])
        self.editButtons = self.createInterface(editButtonDefinitions,
                                                'edit' +
                                                selectedObject.className,
                                                align=ALIGN_RIGHT | ALIGN_TOP,
                                                pos=Vec3(-.05, 0, 0))
 def create(self):
   selectedObject = modelController.getSelectedObject()
   possibleChildren = selectedObject.getPossibleChildren()
   possibleFunctions = selectedObject.getPossibleFunctions()
   
   nodeButtonDefinitions = list()
   if 'NodePathWrapper' in possibleChildren:
     nodeButtonDefinitions.append( ['model', self.createFilebrowserModelWrapper, ['NodePathWrapper']] )
   if 'ParticleSystemWrapper' in possibleChildren:
     nodeButtonDefinitions.append( ['particlesystem', self.createFilebrowserModelWrapper, ['ParticleSystemWrapper']] )
   if 'CodeNodeWrapper' in possibleChildren:
     nodeButtonDefinitions.append( ['codeNode', self.createFilebrowserModelWrapper, ['CodeNodeWrapper']] )
   if 'GeoMipTerrainNodeWrapper' in possibleChildren:
     nodeButtonDefinitions.append( ['GeoMipTerrain', self.createFilebrowserModelWrapper, ['GeoMipTerrainNodeWrapper']] )
   if 'SoundNodeWrapper' in possibleChildren:
     nodeButtonDefinitions.append( ['sound', self.createFilebrowserModelWrapper, ['SoundNodeWrapper']] )
   if 'SceneNodeWrapper' in possibleChildren:
     nodeButtonDefinitions.append( ['scene', self.createFilebrowserModelWrapper, ['SceneNodeWrapper']] )
   if 'ShaderWrapper' in possibleChildren:
     nodeButtonDefinitions.append( ['paintshader', self.createModelWrapper, ['ShaderWrapper']] )
   if 'CurveNodeWrapper' in possibleChildren:
     nodeButtonDefinitions.append( ['curve', self.createModelWrapper, ['CurveNodeWrapper']] )
   if 'CurveSurfaceNodeWrapper' in possibleChildren:
     nodeButtonDefinitions.append( ['surfaceCurve', self.createModelWrapper, ['CurveSurfaceNodeWrapper']] )
   if 'AnimatedTextureWrapper' in possibleChildren:
     nodeButtonDefinitions.append( ['animated texture', self.createModelWrapper, ['AnimatedTextureWrapper']] )
   
   if 'ObjectEggGroup' in possibleChildren:
     nodeButtonDefinitions.append( ['Egg Group', self.createEggWrapper, ['ObjectEggGroup']] )
   if 'ObjectEggGroup' in possibleChildren:
     nodeButtonDefinitions.append( ['Egg Polygon', self.createEggWrapper, ['ObjectEggPolygon']] )
   if 'ObjectEggGroup' in possibleChildren:
     nodeButtonDefinitions.append( ['Egg Texture', self.createEggWrapper, ['ObjectEggTexture']] )
   if 'ObjectEggGroup' in possibleChildren:
     nodeButtonDefinitions.append( ['Egg VertexPool', self.createEggWrapper, ['ObjectEggVertexPool']] )
   
   self.nodeButtons = self.createInterface(nodeButtonDefinitions, 'nodes', align=ALIGN_RIGHT|ALIGN_TOP, pos=Vec3(-.85,0,0))
   
   lightButtonDefinitions = list()
   if 'SpotLightNodeWrapper' in possibleChildren:
     lightButtonDefinitions.append( ['spotlight', self.createModelWrapper, ['SpotLightNodeWrapper']] )
   if 'DirectionalLightNodeWrapper' in possibleChildren:
     lightButtonDefinitions.append( ['directionallight', self.createModelWrapper, ['DirectionalLightNodeWrapper']] )
   if 'AmbientLightNodeWrapper' in possibleChildren:
     lightButtonDefinitions.append( ['ambientlight', self.createModelWrapper, ['AmbientLightNodeWrapper']] )
   if 'PointLightNodeWrapper' in possibleChildren:
     lightButtonDefinitions.append( ['pointlight', self.createModelWrapper, ['PointLightNodeWrapper']] )
   self.lightButtons = self.createInterface(lightButtonDefinitions, 'lights', align=ALIGN_RIGHT|ALIGN_TOP, pos=Vec3(-.45,0,0))
   
   editButtonDefinitions = list()
   if 'destroy' in possibleFunctions:
     editButtonDefinitions.append( ['destroy', self.guiEditorInstance.editorInstance.destroyModel, []] )
   if 'revert' in possibleFunctions:
     editButtonDefinitions.append( ['revert', selectedObject.revert, []] )
   if 'duplicate' in possibleFunctions:
     editButtonDefinitions.append( ['duplicate', self.duplicateModelWrapper, []] )
   if 'save' in possibleFunctions:
     editButtonDefinitions.append( ['save', selectedObject.save, []] )
   if 'saveAs' in possibleFunctions:
     editButtonDefinitions.append( ['saveAs', self.saveAsFile, [selectedObject]] )
   self.editButtons = self.createInterface(editButtonDefinitions, 'edit'+selectedObject.className, align=ALIGN_RIGHT|ALIGN_TOP, pos=Vec3(-.05,0,0))
Esempio n. 17
0
 def viewForSelection(self):
     """Similar to viewForNodePath, but this uses the currently selected model."""
     return self.viewForNodePath(modelController.getSelectedObject())
 def viewForSelection(self):
   """Similar to viewForNodePath, but this uses the currently selected model."""
   return self.viewForNodePath(modelController.getSelectedObject())