Пример #1
0
    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])