Browse Source

Added importing wxPandashell

Gyedo Jeon 15 years ago
parent
commit
c300a5911f
1 changed files with 146 additions and 145 deletions
  1. 146 145
      direct/src/leveleditor/CurveEditor.py

+ 146 - 145
direct/src/leveleditor/CurveEditor.py

@@ -1,145 +1,146 @@
-"""
-This is the module for curve edit
-"""
-
-from pandac.PandaModules import *
-from direct.showbase.DirectObject import *
-from direct.directtools.DirectSelection import SelectionRay
-from direct.showutil.Rope import Rope
-from ActionMgr import *
-from direct.task import Task
-import ObjectGlobals as OG
-
-class CurveEditor(DirectObject):
-    """ CurveEditor will create and edit the curve """
-    def __init__(self, editor):
-        self.editor = editor
-        self.i = 0
-        self.ropeNum = 0
-        self.curve = []
-        self.curveControl = [] 
-        self.currentRope = None
-        self.degree = 3
-    
-    def createCurve(self):
-        if self.editor.mode == self.editor.CREATE_CURVE_MODE:
-            self.view = self.editor.ui.currentView
-            
-            #Get the mouse position
-            x = base.direct.dr.mouseX
-            y = base.direct.dr.mouseY    
-            
-            if self.editor.fMoveCamera == False and self.view != None:
-                self.createControler(x,y)
-                if self.currentRope != None:
-                    self.currentRope.detachNode()
-                self.ropeUpdate(self.curve)
-                self.accept("DIRECT-enter", self.onBaseMode)
-            
-            self.accept("DIRECT-enter", self.onBaseMode) 
-    
-    def editCurve(self, task):
-        if self.editor.mode == self.editor.EDIT_CURVE_MODE:
-            if self.editor.fMoveCamera == False:
-                self.selected = None
-                self.selected = base.direct.selected.last
-                if self.selected != None:
-                    for item in self.curveControl:
-                        if item[1] == self.selected:
-                            self.point = item  #temporarily save the controler information for further use
-                            self.currentCurve = self.currentRope.ropeNode.getCurve()
-                            self.currentCurve.setVertex(item[0], self.selected.getPos())
-                            self.accept("DIRECT-delete", self.onControlerDelete) 
-                            return task.cont 
-    
-    def onControlerDelete(self):
-        if self.editor.mode == self.editor.EDIT_CURVE_MODE:
-            self.curve.remove(self.curve[self.point[0]])
-            #reset the controller list
-            for item in self.curveControl:
-                if item[0] > self.point[0]:
-                    newname = 'controler%d' % (item[0]-1)
-                    item[1].setName(newname)
-                    self.curveControl[item[0]] = (item[0]-1, item[1])
-            self.curveControl.remove(self.point)
-            self.currentRope.setup(self.degree,self.curve)
-
-    def ropeUpdate(self, curve):
-        self.currentRope = Rope()
-        self.currentRope.setup(self.degree, curve)
-        self.currentRope.reparentTo(render)
-        
-    def onBaseMode(self):
-        self.editor.preMode = self.editor.mode
-        self.editor.mode = self.editor.BASE_MODE
-        self.editor.ui.editCurveMenuItem.Check(False)
-        self.editor.ui.createCurveMenuItem.Check(False)
-        self.i = 0
-        for item in self.curveControl:
-            item[1].hide()
-        if self.editor.preMode == self.editor.BASE_MODE :
-            pass
-        if self.editor.preMode == self.editor.CREATE_CURVE_MODE :
-            self.updateScene()
-        if self.editor.preMode == self.editor.EDIT_CURVE_MODE :
-            self.doneEdit()
-        self.curveControl = []
-        self.curve = []
-        self.currentRope = None
-        base.direct.manipulationControl.enableManipulation()
-        self.editor.ui.createCurveMenuItem.Check(False)
-        self.editor.ui.editCurveMenuItem.Check(False)
-        
-    def updateScene(self):
-        curveObjNP = self.editor.objectMgr.addNewCurve(self.curveControl, self.degree, nodePath=self.currentRope)
-        curveObj = self.editor.objectMgr.findObjectByNodePath(curveObjNP)
-        for item in self.curveControl:
-            item[1].reparentTo(curveObjNP)
-        self.editor.objectMgr.updateObjectPropValue(curveObj, 'Degree', self.degree, fSelectObject=False, fUndo=False)
-                                    
-    def doneEdit(self):
-        base.direct.selected.last = None
-            
-    def createControler(self, x, y):
-        if self.view != None:
-            self.controler = render.attachNewNode("controler")
-            self.controler = loader.loadModel('models/misc/smiley')
-            controlerPathname = 'controler%d' % self.i
-            self.controler.setName(controlerPathname)
-            self.controler.setColor(0, 0, 0, 1)
-            self.controler.setScale(0.2)
-            self.controler.reparentTo(render)
-            self.controler.setTag('OBJRoot','1')
-            self.controler.setTag('Controller','1') #controller Tag
-            self.i += 1
-        
-            iRay = SelectionRay(self.view.camera)
-            iRay.collider.setFromLens(self.view.camNode, x, y)
-            iRay.collideWithBitMask(BitMask32.bit(21))
-            iRay.ct.traverse(self.view.collPlane)
-            if iRay.getNumEntries() > 0:
-                entry = iRay.getEntry(0)
-                hitPt = entry.getSurfacePoint(entry.getFromNodePath())
-
-            if hitPt:
-                # create a temp nodePath to get the position
-                np = NodePath('temp')
-                np.setPos(self.view.camera, hitPt)
-
-                if base.direct.manipulationControl.fGridSnap:
-                    snappedPos = self.view.grid.computeSnapPoint(np.getPos())
-                    np.setPos(snappedPos)
-            
-                # update temp nodePath's HPR and scale with newobj's
-                np.setHpr(self.controler.getHpr())
-                np.setScale(self.controler.getScale())
-
-                # transform newobj to cursor position
-                self.controler.setMat(Mat4(np.getMat()))
-                np.remove()
-            iRay.collisionNodePath.removeNode()
-            del iRay
-
-            self.curve.append((None, self.controler.getPos()))
-            self.curveControl.append((self.i-1, self.controler))
-            
+"""
+This is the module for curve edit
+"""
+
+from pandac.PandaModules import *
+from direct.wxwidgets.WxPandaShell import *
+from direct.showbase.DirectObject import *
+from direct.directtools.DirectSelection import SelectionRay
+from direct.showutil.Rope import Rope
+from ActionMgr import *
+from direct.task import Task
+import ObjectGlobals as OG
+
+class CurveEditor(DirectObject):
+    """ CurveEditor will create and edit the curve """
+    def __init__(self, editor):
+        self.editor = editor
+        self.i = 0
+        self.ropeNum = 0
+        self.curve = []
+        self.curveControl = [] 
+        self.currentRope = None
+        self.degree = 3
+    
+    def createCurve(self):
+        if self.editor.mode == self.editor.CREATE_CURVE_MODE:
+            self.view = self.editor.ui.currentView
+            
+            #Get the mouse position
+            x = base.direct.dr.mouseX
+            y = base.direct.dr.mouseY    
+            
+            if self.editor.fMoveCamera == False and self.view != None:
+                self.createControler(x,y)
+                if self.currentRope != None:
+                    self.currentRope.detachNode()
+                self.ropeUpdate(self.curve)
+                self.accept("DIRECT-enter", self.onBaseMode)
+            
+            self.accept("DIRECT-enter", self.onBaseMode) 
+    
+    def editCurve(self, task):
+        if self.editor.mode == self.editor.EDIT_CURVE_MODE:
+            if self.editor.fMoveCamera == False:
+                self.selected = None
+                self.selected = base.direct.selected.last
+                if self.selected != None:
+                    for item in self.curveControl:
+                        if item[1] == self.selected:
+                            self.point = item  #temporarily save the controler information for further use
+                            self.currentCurve = self.currentRope.ropeNode.getCurve()
+                            self.currentCurve.setVertex(item[0], self.selected.getPos())
+                            self.accept("DIRECT-delete", self.onControlerDelete) 
+                            return task.cont 
+    
+    def onControlerDelete(self):
+        if self.editor.mode == self.editor.EDIT_CURVE_MODE:
+            self.curve.remove(self.curve[self.point[0]])
+            #reset the controller list
+            for item in self.curveControl:
+                if item[0] > self.point[0]:
+                    newname = 'controler%d' % (item[0]-1)
+                    item[1].setName(newname)
+                    self.curveControl[item[0]] = (item[0]-1, item[1])
+            self.curveControl.remove(self.point)
+            self.currentRope.setup(self.degree,self.curve)
+
+    def ropeUpdate(self, curve):
+        self.currentRope = Rope()
+        self.currentRope.setup(self.degree, curve)
+        self.currentRope.reparentTo(render)
+        
+    def onBaseMode(self):
+        self.editor.preMode = self.editor.mode
+        self.editor.mode = self.editor.BASE_MODE
+        self.editor.ui.editCurveMenuItem.Check(False)
+        self.editor.ui.createCurveMenuItem.Check(False)
+        self.i = 0
+        for item in self.curveControl:
+            item[1].hide()
+        if self.editor.preMode == self.editor.BASE_MODE :
+            pass
+        if self.editor.preMode == self.editor.CREATE_CURVE_MODE :
+            self.updateScene()
+        if self.editor.preMode == self.editor.EDIT_CURVE_MODE :
+            self.doneEdit()
+        self.curveControl = []
+        self.curve = []
+        self.currentRope = None
+        base.direct.manipulationControl.enableManipulation()
+        self.editor.ui.createCurveMenuItem.Check(False)
+        self.editor.ui.editCurveMenuItem.Check(False)
+        
+    def updateScene(self):
+        curveObjNP = self.editor.objectMgr.addNewCurve(self.curveControl, self.degree, nodePath=self.currentRope)
+        curveObj = self.editor.objectMgr.findObjectByNodePath(curveObjNP)
+        for item in self.curveControl:
+            item[1].reparentTo(curveObjNP)
+        self.editor.objectMgr.updateObjectPropValue(curveObj, 'Degree', self.degree, fSelectObject=False, fUndo=False)
+                                    
+    def doneEdit(self):
+        base.direct.selected.last = None
+            
+    def createControler(self, x, y):
+        if self.view != None:
+            self.controler = render.attachNewNode("controler")
+            self.controler = loader.loadModel('models/misc/smiley')
+            controlerPathname = 'controler%d' % self.i
+            self.controler.setName(controlerPathname)
+            self.controler.setColor(0, 0, 0, 1)
+            self.controler.setScale(0.2)
+            self.controler.reparentTo(render)
+            self.controler.setTag('OBJRoot','1')
+            self.controler.setTag('Controller','1') #controller Tag
+            self.i += 1
+        
+            iRay = SelectionRay(self.view.camera)
+            iRay.collider.setFromLens(self.view.camNode, x, y)
+            iRay.collideWithBitMask(BitMask32.bit(21))
+            iRay.ct.traverse(self.view.collPlane)
+            if iRay.getNumEntries() > 0:
+                entry = iRay.getEntry(0)
+                hitPt = entry.getSurfacePoint(entry.getFromNodePath())
+
+            if hitPt:
+                # create a temp nodePath to get the position
+                np = NodePath('temp')
+                np.setPos(self.view.camera, hitPt)
+
+                if base.direct.manipulationControl.fGridSnap:
+                    snappedPos = self.view.grid.computeSnapPoint(np.getPos())
+                    np.setPos(snappedPos)
+            
+                # update temp nodePath's HPR and scale with newobj's
+                np.setHpr(self.controler.getHpr())
+                np.setScale(self.controler.getScale())
+
+                # transform newobj to cursor position
+                self.controler.setMat(Mat4(np.getMat()))
+                np.remove()
+            iRay.collisionNodePath.removeNode()
+            del iRay
+
+            self.curve.append((None, self.controler.getPos()))
+            self.curveControl.append((self.i-1, self.controler))
+