def IsActive(self): # Will handle LCSs only for the Assembly4 model if Asm4.getSelection() or Asm4.getModelSelected(): # treats all container types : Body and Part #if Asm4.getSelectedContainer() or Asm4.checkModel() or Asm4.getSelectedLink(): return True return False
def RestoreConfiguration(docName): print('Restoring configuration from "' + docName + '"') doc = GetDocument(docName, 'Configurations') model = Asm4.getModelSelected() if model: RestoreSubObjects(doc, model) else: RestoreObject(doc, Asm4.getSelection()) App.ActiveDocument.recompute()
def Activated(self): global processedLinks # reset processed links cache processedLinks = [] model = Asm4.getModelSelected() if model: for objName in model.getSubObjects(): ShowChildLCSs(model.getSubObject(objName, 1), False) else: ShowChildLCSs(Asm4.getSelection(), False)
def SaveConfiguration(docName, description): print('Saving configuration to "' + docName + '"') doc = GetDocument(docName, 'Configurations') if doc: confirm = Asm4.confirmBox('Override cofiguration in "' + docName + '"?') if not confirm: print('Cancel save...') return else: SetDocumentDescription(doc, description) else: doc = CreateDocument(docName, description, 'Configurations') model = Asm4.getModelSelected() if model: SaveSubObjects(doc, model) else: SaveObject(doc, Asm4.getSelection()) doc.recompute(True)
def IsActive(self): # Will handle LCSs only for the Assembly4 model if Asm4.getSelection() or Asm4.getModelSelected(): return True return False
def __init__(self): self.base = QtGui.QWidget() self.form = self.base iconFile = os.path.join( Asm4.iconPath , 'Place_Link.svg') self.form.setWindowIcon(QtGui.QIcon( iconFile )) self.form.setWindowTitle('Place linked Part') # check that we have selected an App::Link object self.selectedLink = [] selection = Asm4.getSelection() if not selection: # This shouldn't happen FCC.PrintWarning("This is not an error message you are supposed to see, something went wrong\n") Gui.Control.closeDialog() else: self.selectedLink = selection # save previous view properties self.old_OverrideMaterial = self.selectedLink.ViewObject.OverrideMaterial self.old_DrawStyle = self.selectedLink.ViewObject.DrawStyle self.old_LineWidth = self.selectedLink.ViewObject.LineWidth self.old_DiffuseColor = self.selectedLink.ViewObject.ShapeMaterial.DiffuseColor self.old_Transparency = self.selectedLink.ViewObject.ShapeMaterial.Transparency # set new view properties self.selectedLink.ViewObject.OverrideMaterial = True self.selectedLink.ViewObject.DrawStyle = DrawStyle self.selectedLink.ViewObject.LineWidth = LineWidth self.selectedLink.ViewObject.ShapeMaterial.DiffuseColor = DiffuseColor self.selectedLink.ViewObject.ShapeMaterial.Transparency = Transparency # draw the GUI, objects are defined later down self.drawUI() global taskUI taskUI = self # get the current active document to avoid errors if user changes tab self.activeDoc = App.activeDocument() # the parent (top-level) assembly is the App::Part called Model (hard-coded) self.parentAssembly = self.activeDoc.Model # check that the link is an Asm4 link: self.isAsm4EE = False if hasattr(self.selectedLink,'AssemblyType'): if self.selectedLink.AssemblyType == 'Asm4EE' or self.selectedLink.AssemblyType == '' : self.isAsm4EE = True else: Asm4.warningBox("This Link's assembly type doesn't correspond to this WorkBench") return # initialize the UI with the current data self.attLCStable = [] self.initUI() # now self.parentList and self.parentTable are available # find all the linked parts in the assembly for objName in self.parentAssembly.getSubObjects(): # remove the trailing . obj = self.activeDoc.getObject(objName[0:-1]) if obj.TypeId=='App::Link' and hasattr(obj.LinkedObject,'isDerivedFrom'): if obj.LinkedObject.isDerivedFrom('App::Part') or obj.LinkedObject.isDerivedFrom('PartDesign::Body'): # ... except if it's the selected link itself if obj != self.selectedLink: self.parentTable.append( obj ) # add to the drop-down combo box with the assembly tree's parts objIcon = obj.LinkedObject.ViewObject.Icon objText = Asm4.nameLabel(obj) self.parentList.addItem( objIcon, objText, obj) # find all the LCS in the selected link self.partLCStable = Asm4.getPartLCS( self.selectedLink.LinkedObject ) # build the list self.partLCSlist.clear() for lcs in self.partLCStable: newItem = QtGui.QListWidgetItem() newItem.setText(Asm4.nameLabel(lcs)) newItem.setIcon( lcs.ViewObject.Icon ) self.partLCSlist.addItem(newItem) # get the old values if self.isAsm4EE: self.old_AO = self.selectedLink.AttachmentOffset self.old_linkLCS = self.selectedLink.AttachedBy[1:] (self.old_Parent, separator, self.old_parentLCS) = self.selectedLink.AttachedTo.partition('#') else: self.old_AO = [] self.old_Parent = '' self.old_EE = '' # get and store the current expression engine: self.old_EE = Asm4.placementEE(self.selectedLink.ExpressionEngine) # decode the old ExpressionEngine old_Parent = '' old_ParentPart = '' old_attLCS = '' constrName = '' linkedDoc = '' old_linkLCS = '' # if the decode is unsuccessful, old_Expression is set to False and the other things are set to 'None' ( old_Parent, old_attLCS, old_linkLCS ) = Asm4.splitExpressionLink( self.old_EE, self.old_Parent ) # find the old LCS in the list of LCS of the linked part... # MatchExactly, MatchContains, MatchEndsWith ... lcs_found = self.partLCSlist.findItems( old_linkLCS, QtCore.Qt.MatchExactly ) if not lcs_found: lcs_found = self.partLCSlist.findItems( old_linkLCS+' (', QtCore.Qt.MatchStartsWith ) if lcs_found: # ... and select it self.partLCSlist.setCurrentItem( lcs_found[0] ) # find the oldPart in the part list... if old_Parent == 'Parent Assembly': parent_found = True parent_index = 1 else: parent_found = False parent_index = 1 for item in self.parentTable[1:]: if item.Name == old_Parent: parent_found = True break else: parent_index = parent_index +1 if not parent_found: parent_index = 0 self.parentList.setCurrentIndex( parent_index ) # this should have triggered self.getPartLCS() to fill the LCS list # find the old attachment Datum in the list of the Datums in the linked part... lcs_found = self.attLCSlist.findItems( old_attLCS, QtCore.Qt.MatchExactly ) if not lcs_found: lcs_found = self.attLCSlist.findItems( old_attLCS+' (', QtCore.Qt.MatchStartsWith ) if lcs_found: # ... and select it self.attLCSlist.setCurrentItem( lcs_found[0] )
def IsActive(self): # We only insert a link into an Asm4 Model if App.ActiveDocument and Asm4.getSelection(): return True return False