فهرست منبع

Made widget be shown in black when non-movable object selected

Gyedo Jeon 17 سال پیش
والد
کامیت
ff36eb76cb
2فایلهای تغییر یافته به همراه29 افزوده شده و 5 حذف شده
  1. 24 5
      direct/src/directtools/DirectManipulation.py
  2. 5 0
      direct/src/directtools/DirectSession.py

+ 24 - 5
direct/src/directtools/DirectManipulation.py

@@ -24,6 +24,7 @@ class DirectManipulationControl(DirectObject):
         self.fWidgetTop = 0
         self.fFreeManip = 1
         self.fScaling = 0
+        self.fMovable = 1
         self.mode = None
         self.actionEvents = [
             ['DIRECT-mouse1', self.manipulationStart],
@@ -189,15 +190,30 @@ class DirectManipulationControl(DirectObject):
         taskMgr.remove('resizeObjectHandles')
 
     def toggleObjectHandlesMode(self):
-        self.fSetCoa = 1 - self.fSetCoa
-        if self.fSetCoa:
-            self.objectHandles.coaModeColor()
+        if self.fMovable:
+            self.fSetCoa = 1 - self.fSetCoa
+
+            if self.fSetCoa:
+                self.objectHandles.coaModeColor()
+            else:
+                self.objectHandles.manipModeColor()
         else:
-            self.objectHandles.manipModeColor()
+            self.objectHandles.disabledModeColor()
 
     def removeManipulateObjectTask(self):
         taskMgr.remove('manipulateObject')
 
+    def enableWidgetMove(self):
+        self.fMovable = 1
+        if self.fSetCoa:
+            self.objectHandles.coaModeColor()            
+        else:
+            self.objectHandles.manipModeColor()
+
+    def disableWidgetMove(self):
+        self.fMovable = 0
+        self.objectHandles.disabledModeColor()        
+
     #--------------------------------------------------------------------------
     # Function:   get edit types list for specified objects which indicate
     #             how editable the objects are
@@ -662,9 +678,12 @@ class ObjectHandles(NodePath, DirectObject):
     def coaModeColor(self):
         self.setColor(.5, .5, .5, 0.5, 1)
 
+    def disabledModeColor(self):
+        self.setColor(0.1,0.1,0.1,0.1,1)
+
     def manipModeColor(self):
         self.clearColor()
-
+            
     def toggleWidget(self):
         if self.fActive:
             self.deactivate()

+ 5 - 0
direct/src/directtools/DirectSession.py

@@ -520,6 +520,11 @@ class DirectSession(DirectObject):
                 'Selected:' + dnp.getName())
             # Show the manipulation widget
             self.widget.showWidget()
+            editTypes = self.manipulationControl.getEditTypes([dnp])
+            if (editTypes & EDIT_TYPE_UNEDITABLE == EDIT_TYPE_UNEDITABLE):
+                self.manipulationControl.disableWidgetMove()
+            else:
+                self.manipulationControl.enableWidgetMove()
             # Update camera controls coa to this point
             # Coa2Camera = Coa2Dnp * Dnp2Camera
             mCoa2Camera = dnp.mCoa2Dnp * dnp.getMat(self.camera)