Ejemplo n.º 1
0
    def action(self, arg):

        if arg["Type"] == "SoKeyboardEvent" and arg["Key"] == "ESCAPE":
            self.finish()
        if arg["Type"] == "SoMouseButtonEvent":
            if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"):
                # coin detection happens before the selection got a chance of being updated, so we must delay
                todo.delay(self.checkSelection,None)
Ejemplo n.º 2
0
    def Activated(self):
        """Execute when the command is called."""
        # finish active Draft command if any
        if FreeCAD.activeDraftCommand is not None:
            FreeCAD.activeDraftCommand.finish()

        # Reset variables
        self.view = Draft.get3DView()
        self.wpButton = FreeCADGui.draftToolBar.wplabel
        FreeCAD.DraftWorkingPlane.setup()

        # Write current WP if states are empty
        if not self.states:
            p = FreeCAD.DraftWorkingPlane
            self.states.append([p.u, p.v, p.axis, p.position])

        # Create task panel
        FreeCADGui.Control.closeDialog()
        self.taskd = task_selectplane.SelectPlaneTaskPanel()
        self.taskd.reject = self.reject

        # Fill values
        self.taskd.form.checkCenter.setChecked(
            self.param.GetBool("CenterPlaneOnView", False))
        q = FreeCAD.Units.Quantity(self.param.GetFloat("gridSpacing", 1.0),
                                   FreeCAD.Units.Length)
        self.taskd.form.fieldGridSpacing.setText(q.UserString)
        self.taskd.form.fieldGridMainLine.setValue(
            self.param.GetInt("gridEvery", 10))
        self.taskd.form.fieldGridExtension.setValue(
            self.param.GetInt("gridSize", 100))
        self.taskd.form.fieldSnapRadius.setValue(
            self.param.GetInt("snapRange", 8))

        # Set icons
        self.taskd.form.setWindowIcon(
            QtGui.QIcon(":/icons/Draft_SelectPlane.svg"))
        self.taskd.form.buttonTop.setIcon(QtGui.QIcon(":/icons/view-top.svg"))
        self.taskd.form.buttonFront.setIcon(
            QtGui.QIcon(":/icons/view-front.svg"))
        self.taskd.form.buttonSide.setIcon(
            QtGui.QIcon(":/icons/view-right.svg"))
        self.taskd.form.buttonAlign.setIcon(
            QtGui.QIcon(":/icons/view-isometric.svg"))
        self.taskd.form.buttonAuto.setIcon(
            QtGui.QIcon(":/icons/view-axonometric.svg"))
        self.taskd.form.buttonMove.setIcon(
            QtGui.QIcon(":/icons/Draft_Move.svg"))
        self.taskd.form.buttonCenter.setIcon(
            QtGui.QIcon(":/icons/view-fullscreen.svg"))
        self.taskd.form.buttonPrevious.setIcon(
            QtGui.QIcon(":/icons/edit-undo.svg"))

        # Connect slots
        self.taskd.form.buttonTop.clicked.connect(self.onClickTop)
        self.taskd.form.buttonFront.clicked.connect(self.onClickFront)
        self.taskd.form.buttonSide.clicked.connect(self.onClickSide)
        self.taskd.form.buttonAlign.clicked.connect(self.onClickAlign)
        self.taskd.form.buttonAuto.clicked.connect(self.onClickAuto)
        self.taskd.form.buttonMove.clicked.connect(self.onClickMove)
        self.taskd.form.buttonCenter.clicked.connect(self.onClickCenter)
        self.taskd.form.buttonPrevious.clicked.connect(self.onClickPrevious)
        self.taskd.form.fieldGridSpacing.textEdited.connect(self.onSetGridSize)
        self.taskd.form.fieldGridMainLine.valueChanged.connect(
            self.onSetMainline)
        self.taskd.form.fieldGridExtension.valueChanged.connect(
            self.onSetExtension)
        self.taskd.form.fieldSnapRadius.valueChanged.connect(
            self.onSetSnapRadius)

        # save previous WP to ensure back to the last used when restored
        FreeCAD.DraftWorkingPlane.save()

        # Try to find a WP from the current selection
        if FreeCADGui.Selection.getSelectionEx(FreeCAD.ActiveDocument.Name):
            if self.handle():
                pass
            # Try another method
            elif FreeCAD.DraftWorkingPlane.alignToSelection():
                FreeCADGui.Selection.clearSelection()
                self.display(FreeCAD.DraftWorkingPlane.axis)
            return None

        # Execute the actual task panel delayed to catch possible active Draft command
        todo.delay(FreeCADGui.Control.showDialog, self.taskd)
        _msg(
            translate(
                "draft",
                "Pick a face, 3 vertices or a WP Proxy to define the drawing plane"
            ))
        self.call = self.view.addEventCallback("SoEvent", self.action)