AttachablePlacement: create base class
base class for all Lattice attachables
This commit is contained in:
parent
e9fd7338ec
commit
5f16da6201
|
@ -36,3 +36,5 @@ import Lattice2PartDesignFeatures as PartDesignFeatures
|
||||||
import Lattice2GuiTools as GuiTools
|
import Lattice2GuiTools as GuiTools
|
||||||
|
|
||||||
import lattice2_rc as resource_module
|
import lattice2_rc as resource_module
|
||||||
|
|
||||||
|
import lattice2Compatibility as Compatibility
|
||||||
|
|
|
@ -31,55 +31,56 @@ import FreeCAD as App
|
||||||
import Part
|
import Part
|
||||||
|
|
||||||
from lattice2Common import *
|
from lattice2Common import *
|
||||||
|
import lattice2Compatibility as Compat
|
||||||
import lattice2BaseFeature
|
import lattice2BaseFeature
|
||||||
import lattice2Subsequencer as Subsequencer
|
import lattice2Subsequencer as Subsequencer
|
||||||
|
|
||||||
|
EDIT_ATTACHMENT = 56 # Viewprovider edit mode number
|
||||||
|
|
||||||
def makeAttachablePlacement(name):
|
def makeAttachablePlacement(name):
|
||||||
'''makeAttachablePlacement(name): makes an attachable Placement object.'''
|
'''makeAttachablePlacement(name): makes an attachable Placement object.'''
|
||||||
|
if Compat.attach_extension_era:
|
||||||
try:
|
obj = lattice2BaseFeature.makeLatticeFeature(name, AttachablePlacement, ViewProviderAttachablePlacement, no_disable_attacher= True)
|
||||||
rev_number = int(App.Version()[2].split(" ")[0])
|
else:
|
||||||
except Exception as err:
|
|
||||||
rev_number = 10000000
|
|
||||||
|
|
||||||
if rev_number < 9177:
|
|
||||||
#obsolete!
|
#obsolete!
|
||||||
obj = FreeCAD.ActiveDocument.addObject("Part::AttachableObjectPython",name)
|
obj = FreeCAD.ActiveDocument.addObject("Part::AttachableObjectPython",name)
|
||||||
AttachablePlacement(obj)
|
AttachablePlacement(obj)
|
||||||
if FreeCAD.GuiUp:
|
if FreeCAD.GuiUp:
|
||||||
ViewProviderAttachablePlacement(obj.ViewObject)
|
ViewProviderAttachablePlacement(obj.ViewObject)
|
||||||
else:
|
|
||||||
obj = lattice2BaseFeature.makeLatticeFeature(name, AttachablePlacement, ViewProviderAttachablePlacement, no_disable_attacher= True)
|
|
||||||
if not obj.hasExtension('Part::AttachExtension'):
|
|
||||||
obj.addExtension("Part::AttachExtensionPython", None)
|
|
||||||
|
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
class AttachablePlacement(lattice2BaseFeature.LatticeFeature):
|
class AttachableFeature(lattice2BaseFeature.LatticeFeature):
|
||||||
"Attachable Lattice Placement object"
|
"Base class for attachable features"
|
||||||
|
|
||||||
def derivedInit(self,obj):
|
def derivedInit(self,obj):
|
||||||
self.Type = "AttachablePlacement"
|
if Compat.attach_extension_era:
|
||||||
|
if not obj.hasExtension('Part::AttachExtension'): #PartDesign-related hack: the placement already has attachextension if created in PD
|
||||||
obj.ExposePlacement = True
|
obj.addExtension('Part::AttachExtensionPython', None)
|
||||||
obj.setEditorMode("ExposePlacement", 1) #read-only
|
|
||||||
|
|
||||||
def derivedExecute(self,obj):
|
|
||||||
obj.positionBySupport()
|
|
||||||
|
|
||||||
return [obj.Placement]
|
|
||||||
|
|
||||||
def onDocumentRestored(self, selfobj):
|
def onDocumentRestored(self, selfobj):
|
||||||
#override that disables disabling of attacher
|
#PartDesign-related hack: this dummy override disables disabling of attacher
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class ViewProviderAttachablePlacement(lattice2BaseFeature.ViewProviderLatticeFeature):
|
class AttachablePlacement(AttachableFeature):
|
||||||
|
"Attachable Lattice Placement object"
|
||||||
|
|
||||||
def getIcon(self):
|
def derivedInit(self,selfobj):
|
||||||
return getIconPath('Lattice2_AttachablePlacement.svg')
|
super(AttachablePlacement, self).derivedInit(selfobj)
|
||||||
|
selfobj.ExposePlacement = True
|
||||||
|
selfobj.setEditorMode('ExposePlacement', 1) #read-only
|
||||||
|
|
||||||
|
def derivedExecute(self,selfobj):
|
||||||
|
selfobj.ExposePlacement = True
|
||||||
|
selfobj.positionBySupport()
|
||||||
|
|
||||||
|
return [selfobj.Placement]
|
||||||
|
|
||||||
|
class ViewProviderAttachableFeature(lattice2BaseFeature.ViewProviderLatticeFeature):
|
||||||
|
always_edit_attachment = False
|
||||||
def setEdit(self,vobj,mode):
|
def setEdit(self,vobj,mode):
|
||||||
|
if not (mode == EDIT_ATTACHMENT or (mode == 0 and always_edit_attachment)): raise NotImplementedError()
|
||||||
import PartGui
|
import PartGui
|
||||||
import FreeCADGui as Gui
|
import FreeCADGui as Gui
|
||||||
PartGui.AttachmentEditor.editAttachment(self.Object,
|
PartGui.AttachmentEditor.editAttachment(self.Object,
|
||||||
|
@ -88,10 +89,23 @@ class ViewProviderAttachablePlacement(lattice2BaseFeature.ViewProviderLatticeFea
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def unsetEdit(self,vobj,mode):
|
def unsetEdit(self,vobj,mode):
|
||||||
|
if not (mode == EDIT_ATTACHMENT or (mode == 0 and always_edit_attachment)): raise NotImplementedError()
|
||||||
import FreeCADGui as Gui
|
import FreeCADGui as Gui
|
||||||
Gui.Control.closeDialog()
|
Gui.Control.closeDialog()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def setupContextMenu(self,vobj,menu):
|
||||||
|
from PySide import QtCore,QtGui
|
||||||
|
action1 = QtGui.QAction(QtGui.QIcon(":/icons/Part_Attachment.svg"),"Attachment...",menu)
|
||||||
|
QtCore.QObject.connect(action1,QtCore.SIGNAL("triggered()"), lambda: FreeCADGui.ActiveDocument.setEdit(vobj, 56))
|
||||||
|
menu.addAction(action1)
|
||||||
|
menu.setDefaultAction(action1)
|
||||||
|
|
||||||
|
class ViewProviderAttachablePlacement(ViewProviderAttachableFeature):
|
||||||
|
always_edit_attachment = True
|
||||||
|
def getIcon(self):
|
||||||
|
return getIconPath('Lattice2_AttachablePlacement.svg')
|
||||||
|
|
||||||
|
|
||||||
def makeLatticeAttachedPlacementSubsequence(name):
|
def makeLatticeAttachedPlacementSubsequence(name):
|
||||||
'''makeLatticeAttachedPlacementSubsequence(name): makes a AttachedPlacementSubsequence object.'''
|
'''makeLatticeAttachedPlacementSubsequence(name): makes a AttachedPlacementSubsequence object.'''
|
||||||
|
@ -136,6 +150,18 @@ class ViewProviderAttachedPlacementSubsequence(lattice2BaseFeature.ViewProviderL
|
||||||
|
|
||||||
# -------------------------- Gui command --------------------------------------------------
|
# -------------------------- Gui command --------------------------------------------------
|
||||||
|
|
||||||
|
def editNewAttachment(f):
|
||||||
|
def accepted(f):
|
||||||
|
App.ActiveDocument.commitTransaction()
|
||||||
|
FreeCADGui.Selection.clearSelection()
|
||||||
|
FreeCADGui.Selection.addSelection(f)
|
||||||
|
import PartGui
|
||||||
|
PartGui.AttachmentEditor.editAttachment(f, take_selection= True,
|
||||||
|
create_transaction= False,
|
||||||
|
callback_OK= lambda f=f: accepted(f),
|
||||||
|
callback_Cancel= lambda: App.ActiveDocument.abortTransaction())
|
||||||
|
|
||||||
|
|
||||||
def CreateAttachablePlacement(name):
|
def CreateAttachablePlacement(name):
|
||||||
sel = FreeCADGui.Selection.getSelectionEx()
|
sel = FreeCADGui.Selection.getSelectionEx()
|
||||||
FreeCAD.ActiveDocument.openTransaction("Create Attachable Placement")
|
FreeCAD.ActiveDocument.openTransaction("Create Attachable Placement")
|
||||||
|
@ -144,11 +170,8 @@ def CreateAttachablePlacement(name):
|
||||||
FreeCADGui.addModule("PartGui")
|
FreeCADGui.addModule("PartGui")
|
||||||
FreeCADGui.doCommand("f = lattice2AttachablePlacement.makeAttachablePlacement(name='"+name+"')")
|
FreeCADGui.doCommand("f = lattice2AttachablePlacement.makeAttachablePlacement(name='"+name+"')")
|
||||||
FreeCADGui.doCommand("lattice2Executer.executeFeature(f)")
|
FreeCADGui.doCommand("lattice2Executer.executeFeature(f)")
|
||||||
FreeCADGui.doCommand("PartGui.AttachmentEditor.editAttachment(f, take_selection= True,"
|
FreeCADGui.doCommand("lattice2AttachablePlacement.editNewAttachment(f)")
|
||||||
"create_transaction= False,"
|
#FreeCAD.ActiveDocument.commitTransaction()
|
||||||
"callback_OK= lambda: App.ActiveDocument.commitTransaction(),"
|
|
||||||
"callback_Cancel= lambda: App.ActiveDocument.abortTransaction())")
|
|
||||||
FreeCAD.ActiveDocument.commitTransaction()
|
|
||||||
|
|
||||||
def cmdCreateAttachedPlacementSubsequence(name):
|
def cmdCreateAttachedPlacementSubsequence(name):
|
||||||
sel = FreeCADGui.Selection.getSelectionEx()
|
sel = FreeCADGui.Selection.getSelectionEx()
|
||||||
|
|
11
lattice2Compatibility.py
Normal file
11
lattice2Compatibility.py
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
import FreeCAD as App
|
||||||
|
|
||||||
|
try:
|
||||||
|
rev_number = int(App.Version()[2].split(" ")[0])
|
||||||
|
except Exception as err:
|
||||||
|
rev_number = 10000000
|
||||||
|
del err
|
||||||
|
|
||||||
|
attach_extension_era = rev_number >= 9177
|
||||||
|
|
||||||
|
del App
|
Loading…
Reference in New Issue
Block a user