diff --git a/direct/src/directtools/DirectManipulation.py b/direct/src/directtools/DirectManipulation.py index d3a318d6ec..a461d11285 100644 --- a/direct/src/directtools/DirectManipulation.py +++ b/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() diff --git a/direct/src/directtools/DirectSession.py b/direct/src/directtools/DirectSession.py index 2138c837d2..6cc3ec0793 100644 --- a/direct/src/directtools/DirectSession.py +++ b/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)