def __init__(self, obj_to_attach, take_selection=False, create_transaction=True, callback_OK=None, callback_Cancel=None, callback_Apply=None): self.__define_attributes() self.create_transaction = create_transaction self.callback_OK = callback_OK self.callback_Cancel = callback_Cancel self.callback_Apply = callback_Apply self.obj = obj_to_attach if hasattr(obj_to_attach, 'Attacher'): self.attacher = obj_to_attach.Attacher elif hasattr(obj_to_attach, 'AttacherType'): self.attacher = Part.AttachEngine(obj_to_attach.AttacherType) else: movable = True if not hasattr(self.obj, "Placement"): movable = False if 'Hidden' in self.obj.getEditorMode( "Placement") or 'ReadOnly' in self.obj.getEditorMode( "Placement"): movable = False if not movable: if self.callback_Cancel: self.callback_Cancel() raise ValueError( _translate( 'AttachmentEditor', "Object {name} is neither movable nor attachable, can't edit attachment", None).format(name=self.obj.Label)) self.obj_is_attachable = False self.attacher = Part.AttachEngine() mb = QtGui.QMessageBox() mb.setIcon(mb.Icon.Warning) mb.setText( _translate( 'AttachmentEditor', "{obj} is not attachable. You can still use attachment editor dialog to align the object, but the attachment won't be parametic.", None).format(obj=obj_to_attach.Label)) mb.setWindowTitle( _translate('AttachmentEditor', "Attachment", None)) btnAbort = mb.addButton(QtGui.QMessageBox.StandardButton.Abort) btnOK = mb.addButton( _translate('AttachmentEditor', "Continue", None), QtGui.QMessageBox.ButtonRole.ActionRole) mb.setDefaultButton(btnOK) mb.exec_() if mb.clickedButton() is btnAbort: if self.callback_Cancel: self.callback_Cancel() raise CancelError() import os self.form = uic.loadUi( os.path.dirname(__file__) + os.path.sep + 'TaskAttachmentEditor.ui') self.form.setWindowIcon(QtGui.QIcon(':/icons/Part_Attachment.svg')) self.form.setWindowTitle( _translate('AttachmentEditor', "Attachment", None)) self.refLines = [ self.form.lineRef1, self.form.lineRef2, self.form.lineRef3, self.form.lineRef4 ] self.refButtons = [ self.form.buttonRef1, self.form.buttonRef2, self.form.buttonRef3, self.form.buttonRef4 ] self.superPlacementEdits = [ self.form.superplacementX, self.form.superplacementY, self.form.superplacementZ, self.form.superplacementYaw, self.form.superplacementPitch, self.form.superplacementRoll ] self.block = False for i in range(len(self.refLines)): QtCore.QObject.connect( self.refLines[i], QtCore.SIGNAL('textEdited(QString)'), lambda txt, i=i: self.lineRefChanged(i, txt)) for i in range(len(self.refLines)): QtCore.QObject.connect(self.refButtons[i], QtCore.SIGNAL('clicked()'), lambda i=i: self.refButtonClicked(i)) for i in range(len(self.superPlacementEdits)): QtCore.QObject.connect( self.superPlacementEdits[i], QtCore.SIGNAL('valueChanged(double)'), lambda val, i=i: self.superplacementChanged(i, val)) QtCore.QObject.connect(self.form.checkBoxFlip, QtCore.SIGNAL('clicked()'), self.checkBoxFlipClicked) QtCore.QObject.connect(self.form.listOfModes, QtCore.SIGNAL('itemSelectionChanged()'), self.modeSelected) if self.create_transaction: self.obj.Document.openTransaction( _translate('AttachmentEditor', "Edit attachment of {feat}", None).format(feat=self.obj.Name)) self.readParameters() if len(self.attacher.References) == 0 and take_selection: sel = GetSelectionAsLinkSubList() for i in range(len(sel))[::-1]: if sel[i][0] is obj_to_attach: sel.pop(i) self.attacher.References = sel if len(self.attacher.References) == 0: self.i_active_ref = 0 self.auto_next = True else: self.i_active_ref = -1 self.auto_next = False Gui.Selection.addObserver(self) self.updatePreview() self.updateRefButtons() self.tv = TempoVis(self.obj.Document) self.tv.hide_all_dependent(self.obj) self.tv.show(self.obj) self.tv.show([obj for (obj, subname) in self.attacher.References])