Draft: gui_selectplane cleanup
Small spacing fixes like imports in separate lines for more clarity, and the position of the license. Added many docstrings to clarify the methods, and spaces after commas in order to comply with Python PEP8 style. Also break many lines so that they are shorter than 80 characters.
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
# -*- coding: utf8 -*-
|
||||
# ***************************************************************************
|
||||
# * Copyright (c) 2019 Yorik van Havre <yorik@uncreated.net> *
|
||||
# * *
|
||||
@@ -19,23 +18,32 @@
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
"""Provides the Draft SelectPlane tool."""
|
||||
## @package gui_selectplane
|
||||
# \ingroup DRAFT
|
||||
# \brief This module provides the Draft SelectPlane tool.
|
||||
|
||||
__title__ = "FreeCAD Draft Workbench GUI Tools - Working plane-related tools"
|
||||
__author__ = "Yorik van Havre, Werner Mayer, Martin Burbaum, Ken Cline, Dmitry Chigrin"
|
||||
__url__ = "https://www.freecadweb.org"
|
||||
|
||||
import math
|
||||
from pivy import coin
|
||||
from PySide import QtGui
|
||||
from PySide.QtCore import QT_TRANSLATE_NOOP
|
||||
|
||||
import FreeCAD
|
||||
import FreeCADGui
|
||||
import math
|
||||
import Draft
|
||||
import Draft_rc
|
||||
import DraftVecUtils
|
||||
from draftutils.todo import todo
|
||||
from draftutils.messages import _msg
|
||||
from draftutils.translate import translate
|
||||
|
||||
# The module is used to prevent complaints from code checkers (flake8)
|
||||
True if Draft_rc.__name__ else False
|
||||
|
||||
def QT_TRANSLATE_NOOP(ctx,txt): return txt
|
||||
|
||||
__title__ = "FreeCAD Draft Workbench GUI Tools - Working plane-related tools"
|
||||
__author__ = ("Yorik van Havre, Werner Mayer, Martin Burbaum, Ken Cline, "
|
||||
"Dmitry Chigrin")
|
||||
__url__ = "https://www.freecadweb.org"
|
||||
|
||||
|
||||
class Draft_SelectPlane:
|
||||
@@ -48,10 +56,15 @@ class Draft_SelectPlane:
|
||||
|
||||
def GetResources(self):
|
||||
"""Set icon, menu and tooltip."""
|
||||
return {'Pixmap' : 'Draft_SelectPlane',
|
||||
'Accel' : "W, P",
|
||||
'MenuText': QT_TRANSLATE_NOOP("Draft_SelectPlane", "SelectPlane"),
|
||||
'ToolTip' : QT_TRANSLATE_NOOP("Draft_SelectPlane", "Select a working plane for geometry creation")}
|
||||
_msg = ("Select the face of solid body to create a working plane "
|
||||
"on which to sketch Draft objects.\n"
|
||||
"You may also select a three vertices or "
|
||||
"a Working Plane Proxy.")
|
||||
d = {'Pixmap': 'Draft_SelectPlane',
|
||||
'Accel': "W, P",
|
||||
'MenuText': QT_TRANSLATE_NOOP("Draft_SelectPlane", "SelectPlane"),
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Draft_SelectPlane", _msg)}
|
||||
return d
|
||||
|
||||
def IsActive(self):
|
||||
"""Return True when this command should be available."""
|
||||
@@ -61,34 +74,33 @@ class Draft_SelectPlane:
|
||||
return False
|
||||
|
||||
def Activated(self):
|
||||
"""Execute this when the command is called."""
|
||||
# reset variables
|
||||
"""Execute when the command is called."""
|
||||
# Reset variables
|
||||
self.view = Draft.get3DView()
|
||||
self.wpButton = FreeCADGui.draftToolBar.wplabel
|
||||
FreeCAD.DraftWorkingPlane.setup()
|
||||
|
||||
# write current WP if states are empty
|
||||
# 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])
|
||||
|
||||
m = translate("draft", "Pick a face, 3 vertices or a WP Proxy to define the drawing plane")
|
||||
FreeCAD.Console.PrintMessage(m+"\n")
|
||||
m = translate("draft", "Pick a face, 3 vertices "
|
||||
"or a WP Proxy to define the drawing plane")
|
||||
_msg(m)
|
||||
|
||||
from PySide import QtCore,QtGui
|
||||
|
||||
# create UI panel
|
||||
# Create task panel
|
||||
FreeCADGui.Control.closeDialog()
|
||||
self.taskd = SelectPlane_TaskPanel()
|
||||
|
||||
# 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)
|
||||
# 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.fieldSnapRadius.setValue(self.param.GetInt("snapRange",8))
|
||||
self.taskd.form.fieldGridMainLine.setValue(self.param.GetInt("gridEvery", 10))
|
||||
self.taskd.form.fieldSnapRadius.setValue(self.param.GetInt("snapRange", 8))
|
||||
|
||||
# set icons
|
||||
# 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"))
|
||||
@@ -99,7 +111,7 @@ class Draft_SelectPlane:
|
||||
self.taskd.form.buttonCenter.setIcon(QtGui.QIcon(":/icons/view-fullscreen.svg"))
|
||||
self.taskd.form.buttonPrevious.setIcon(QtGui.QIcon(":/icons/edit-undo.svg"))
|
||||
|
||||
# connect slots
|
||||
# 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)
|
||||
@@ -112,57 +124,59 @@ class Draft_SelectPlane:
|
||||
self.taskd.form.fieldGridMainLine.valueChanged.connect(self.onSetMainline)
|
||||
self.taskd.form.fieldSnapRadius.valueChanged.connect(self.onSetSnapRadius)
|
||||
|
||||
# try to find a WP from the current selection
|
||||
# Try to find a WP from the current selection
|
||||
if self.handle():
|
||||
return
|
||||
|
||||
# try other method
|
||||
# Try another method
|
||||
if FreeCAD.DraftWorkingPlane.alignToSelection():
|
||||
FreeCADGui.Selection.clearSelection()
|
||||
self.display(FreeCAD.DraftWorkingPlane.axis)
|
||||
self.finish()
|
||||
return
|
||||
|
||||
# rock 'n roll!
|
||||
|
||||
# Execute the actual task panel
|
||||
FreeCADGui.Control.showDialog(self.taskd)
|
||||
self.call = self.view.addEventCallback("SoEvent", self.action)
|
||||
|
||||
def finish(self,close=False):
|
||||
def finish(self, close=False):
|
||||
"""Execute when the command is terminated."""
|
||||
# Store values
|
||||
self.param.SetBool("CenterPlaneOnView",
|
||||
self.taskd.form.checkCenter.isChecked())
|
||||
|
||||
# store values
|
||||
self.param.SetBool("CenterPlaneOnView",self.taskd.form.checkCenter.isChecked())
|
||||
|
||||
# terminate coin callbacks
|
||||
# Terminate coin callbacks
|
||||
if self.call:
|
||||
try:
|
||||
self.view.removeEventCallback("SoEvent",self.call)
|
||||
self.view.removeEventCallback("SoEvent", self.call)
|
||||
except RuntimeError:
|
||||
# the view has been deleted already
|
||||
# The view has been deleted already
|
||||
pass
|
||||
self.call = None
|
||||
|
||||
# reset everything else
|
||||
# Reset everything else
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCAD.DraftWorkingPlane.restore()
|
||||
FreeCADGui.ActiveDocument.resetEdit()
|
||||
return True
|
||||
|
||||
def reject(self):
|
||||
|
||||
"""Execute when clicking the Cancel button."""
|
||||
self.finish()
|
||||
return True
|
||||
|
||||
def action(self, arg):
|
||||
|
||||
"""Set the callbacks for the view."""
|
||||
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)
|
||||
# Coin detection happens before the selection
|
||||
# got a chance of being updated, so we must delay
|
||||
todo.delay(self.checkSelection, None)
|
||||
|
||||
def checkSelection(self):
|
||||
|
||||
"""Check the selection, if there is a handle, finish the command."""
|
||||
if self.handle():
|
||||
self.finish()
|
||||
|
||||
@@ -175,18 +189,19 @@ class Draft_SelectPlane:
|
||||
FreeCAD.DraftWorkingPlane.alignToEdges(sel.Object.Shape.Edges)
|
||||
self.display(FreeCAD.DraftWorkingPlane.axis)
|
||||
return True
|
||||
elif Draft.getType(sel.Object) in ["WorkingPlaneProxy","BuildingPart"]:
|
||||
FreeCAD.DraftWorkingPlane.setFromPlacement(sel.Object.Placement,rebase=True)
|
||||
elif Draft.getType(sel.Object) in ("WorkingPlaneProxy",
|
||||
"BuildingPart"):
|
||||
FreeCAD.DraftWorkingPlane.setFromPlacement(sel.Object.Placement, rebase=True)
|
||||
FreeCAD.DraftWorkingPlane.weak = False
|
||||
if hasattr(sel.Object.ViewObject,"AutoWorkingPlane"):
|
||||
if hasattr(sel.Object.ViewObject, "AutoWorkingPlane"):
|
||||
if sel.Object.ViewObject.AutoWorkingPlane:
|
||||
FreeCAD.DraftWorkingPlane.weak = True
|
||||
if hasattr(sel.Object.ViewObject,"CutView") and hasattr(sel.Object.ViewObject,"AutoCutView"):
|
||||
if hasattr(sel.Object.ViewObject, "CutView") and hasattr(sel.Object.ViewObject, "AutoCutView"):
|
||||
if sel.Object.ViewObject.AutoCutView:
|
||||
sel.Object.ViewObject.CutView = True
|
||||
if hasattr(sel.Object.ViewObject,"RestoreView"):
|
||||
if hasattr(sel.Object.ViewObject, "RestoreView"):
|
||||
if sel.Object.ViewObject.RestoreView:
|
||||
if hasattr(sel.Object.ViewObject,"ViewData"):
|
||||
if hasattr(sel.Object.ViewObject, "ViewData"):
|
||||
if len(sel.Object.ViewObject.ViewData) >= 12:
|
||||
d = sel.Object.ViewObject.ViewData
|
||||
camtype = "orthographic"
|
||||
@@ -194,16 +209,15 @@ class Draft_SelectPlane:
|
||||
if d[12] == 1:
|
||||
camtype = "perspective"
|
||||
c = FreeCADGui.ActiveDocument.ActiveView.getCameraNode()
|
||||
from pivy import coin
|
||||
if isinstance(c,coin.SoOrthographicCamera):
|
||||
if isinstance(c, coin.SoOrthographicCamera):
|
||||
if camtype == "perspective":
|
||||
FreeCADGui.ActiveDocument.ActiveView.setCameraType("Perspective")
|
||||
elif isinstance(c,coin.SoPerspectiveCamera):
|
||||
elif isinstance(c, coin.SoPerspectiveCamera):
|
||||
if camtype == "orthographic":
|
||||
FreeCADGui.ActiveDocument.ActiveView.setCameraType("Orthographic")
|
||||
c = FreeCADGui.ActiveDocument.ActiveView.getCameraNode()
|
||||
c.position.setValue([d[0],d[1],d[2]])
|
||||
c.orientation.setValue([d[3],d[4],d[5],d[6]])
|
||||
c.position.setValue([d[0], d[1], d[2]])
|
||||
c.orientation.setValue([d[3], d[4], d[5], d[6]])
|
||||
c.nearDistance.setValue(d[7])
|
||||
c.farDistance.setValue(d[8])
|
||||
c.aspectRatio.setValue(d[9])
|
||||
@@ -212,9 +226,9 @@ class Draft_SelectPlane:
|
||||
c.height.setValue(d[11])
|
||||
else:
|
||||
c.heightAngle.setValue(d[11])
|
||||
if hasattr(sel.Object.ViewObject,"RestoreState"):
|
||||
if hasattr(sel.Object.ViewObject, "RestoreState"):
|
||||
if sel.Object.ViewObject.RestoreState:
|
||||
if hasattr(sel.Object.ViewObject,"VisibilityMap"):
|
||||
if hasattr(sel.Object.ViewObject, "VisibilityMap"):
|
||||
if sel.Object.ViewObject.VisibilityMap:
|
||||
for k,v in sel.Object.ViewObject.VisibilityMap.items():
|
||||
o = FreeCADGui.ActiveDocument.getObject(k)
|
||||
@@ -226,7 +240,7 @@ class Draft_SelectPlane:
|
||||
self.wpButton.setToolTip(translate("draft", "Current working plane")+": "+self.wpButton.text())
|
||||
return True
|
||||
elif Draft.getType(sel.Object) == "SectionPlane":
|
||||
FreeCAD.DraftWorkingPlane.setFromPlacement(sel.Object.Placement,rebase=True)
|
||||
FreeCAD.DraftWorkingPlane.setFromPlacement(sel.Object.Placement, rebase=True)
|
||||
FreeCAD.DraftWorkingPlane.weak = False
|
||||
self.display(FreeCAD.DraftWorkingPlane.axis)
|
||||
self.wpButton.setText(sel.Object.Label)
|
||||
@@ -239,7 +253,7 @@ class Draft_SelectPlane:
|
||||
self.display(FreeCAD.DraftWorkingPlane.axis)
|
||||
return True
|
||||
elif sel.SubElementNames[0] == "Plane":
|
||||
FreeCAD.DraftWorkingPlane.setFromPlacement(sel.Object.Placement,rebase=True)
|
||||
FreeCAD.DraftWorkingPlane.setFromPlacement(sel.Object.Placement, rebase=True)
|
||||
self.display(FreeCAD.DraftWorkingPlane.axis)
|
||||
return True
|
||||
elif len(sel.SubElementNames) == 3:
|
||||
@@ -263,7 +277,7 @@ class Draft_SelectPlane:
|
||||
import Part
|
||||
for s in sel:
|
||||
for so in s.SubObjects:
|
||||
if isinstance(so,Part.Vertex):
|
||||
if isinstance(so, Part.Vertex):
|
||||
subs.append(so)
|
||||
if len(subs) == 3:
|
||||
FreeCAD.DraftWorkingPlane.alignTo3Points(subs[0].Point,
|
||||
@@ -275,25 +289,31 @@ class Draft_SelectPlane:
|
||||
return False
|
||||
|
||||
def getCenterPoint(self, x, y, z):
|
||||
|
||||
"""Get the center point."""
|
||||
if not self.taskd.form.checkCenter.isChecked():
|
||||
return FreeCAD.Vector()
|
||||
v = FreeCAD.Vector(x,y,z)
|
||||
cam1 = FreeCAD.Vector(FreeCADGui.ActiveDocument.ActiveView.getCameraNode().position.getValue().getValue())
|
||||
v = FreeCAD.Vector(x, y, z)
|
||||
view = FreeCADGui.ActiveDocument.ActiveView
|
||||
camera = view.getCameraNode()
|
||||
cam1 = FreeCAD.Vector(camera.position.getValue().getValue())
|
||||
cam2 = FreeCADGui.ActiveDocument.ActiveView.getViewDirection()
|
||||
vcam1 = DraftVecUtils.project(cam1,v)
|
||||
vcam1 = DraftVecUtils.project(cam1, v)
|
||||
a = vcam1.getAngle(cam2)
|
||||
if a < 0.0001:
|
||||
return FreeCAD.Vector()
|
||||
d = vcam1.Length
|
||||
L = d/math.cos(a)
|
||||
vcam2 = DraftVecUtils.scaleTo(cam2,L)
|
||||
vcam2 = DraftVecUtils.scaleTo(cam2, L)
|
||||
cp = cam1.add(vcam2)
|
||||
return cp
|
||||
|
||||
def tostr(self, v):
|
||||
"""Make a string from a vector or tuple."""
|
||||
return "FreeCAD.Vector("+str(v[0])+","+str(v[1])+","+str(v[2])+")"
|
||||
string = "FreeCAD.Vector("
|
||||
string += str(v[0]) + ", "
|
||||
string += str(v[1]) + ", "
|
||||
string += str(v[2]) + ")"
|
||||
return string
|
||||
|
||||
def getOffset(self):
|
||||
"""Return the offset value as a float in mm."""
|
||||
@@ -305,48 +325,66 @@ class Draft_SelectPlane:
|
||||
return o
|
||||
|
||||
def onClickTop(self):
|
||||
|
||||
o = str(self.getOffset())
|
||||
FreeCADGui.doCommandGui(self.ac+"("+self.tostr(self.getCenterPoint(0,0,1))+","+self.tostr((0,0,1))+","+o+")")
|
||||
"""Execute when pressing the top button."""
|
||||
offset = str(self.getOffset())
|
||||
_cmd = self.ac
|
||||
_cmd += "("
|
||||
_cmd += self.tostr(self.getCenterPoint(0, 0, 1)) + ", "
|
||||
_cmd += self.tostr((0, 0, 1)) + ", "
|
||||
_cmd += offset
|
||||
_cmd += ")"
|
||||
FreeCADGui.doCommandGui(_cmd)
|
||||
self.display('Top')
|
||||
self.finish()
|
||||
|
||||
def onClickFront(self):
|
||||
|
||||
o = str(self.getOffset())
|
||||
FreeCADGui.doCommandGui(self.ac+"("+self.tostr(self.getCenterPoint(0,-1,0))+","+self.tostr((0,-1,0))+","+o+")")
|
||||
"""Execute when pressing the front button."""
|
||||
offset = str(self.getOffset())
|
||||
_cmd = self.ac
|
||||
_cmd += "("
|
||||
_cmd += self.tostr(self.getCenterPoint(0, -1, 0)) + ", "
|
||||
_cmd += self.tostr((0, -1, 0)) + ", "
|
||||
_cmd += offset
|
||||
_cmd += ")"
|
||||
FreeCADGui.doCommandGui(_cmd)
|
||||
self.display('Front')
|
||||
self.finish()
|
||||
|
||||
def onClickSide(self):
|
||||
|
||||
o = str(self.getOffset())
|
||||
FreeCADGui.doCommandGui(self.ac+"("+self.tostr(self.getCenterPoint(1,0,0))+","+self.tostr((1,0,0))+","+o+")")
|
||||
"""Execute when pressing the side button."""
|
||||
offset = str(self.getOffset())
|
||||
_cmd = self.ac
|
||||
_cmd += "("
|
||||
_cmd += self.tostr(self.getCenterPoint(1, 0, 0)) + ", "
|
||||
_cmd += self.tostr((1, 0, 0)) + ", "
|
||||
_cmd += offset
|
||||
_cmd += ")"
|
||||
FreeCADGui.doCommandGui(_cmd)
|
||||
self.display('Side')
|
||||
self.finish()
|
||||
|
||||
def onClickAlign(self):
|
||||
|
||||
"""Execute when pressing the align."""
|
||||
FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.setup(force=True)")
|
||||
d = self.view.getViewDirection().negative()
|
||||
self.display(d)
|
||||
self.finish()
|
||||
|
||||
def onClickAuto(self):
|
||||
|
||||
"""Execute when pressing the auto button."""
|
||||
FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.reset()")
|
||||
self.display('Auto')
|
||||
self.finish()
|
||||
|
||||
def onClickMove(self):
|
||||
|
||||
"""Execute when pressing the move button."""
|
||||
sel = FreeCADGui.Selection.getSelectionEx()
|
||||
if sel:
|
||||
verts = []
|
||||
import Part
|
||||
for s in sel:
|
||||
for so in s.SubObjects:
|
||||
if isinstance(so,Part.Vertex):
|
||||
if isinstance(so, Part.Vertex):
|
||||
verts.append(so)
|
||||
if len(verts) == 1:
|
||||
target = verts[0].Point
|
||||
@@ -358,13 +396,13 @@ class Draft_SelectPlane:
|
||||
c = FreeCADGui.ActiveDocument.ActiveView.getCameraNode()
|
||||
p = FreeCAD.Vector(c.position.getValue().getValue())
|
||||
d = FreeCADGui.ActiveDocument.ActiveView.getViewDirection()
|
||||
pp = FreeCAD.DraftWorkingPlane.projectPoint(p,d)
|
||||
pp = FreeCAD.DraftWorkingPlane.projectPoint(p, d)
|
||||
FreeCAD.DraftWorkingPlane.position = pp
|
||||
self.display(pp)
|
||||
self.finish()
|
||||
|
||||
def onClickCenter(self):
|
||||
|
||||
"""Execute when pressing the center button."""
|
||||
c = FreeCADGui.ActiveDocument.ActiveView.getCameraNode()
|
||||
r = FreeCAD.DraftWorkingPlane.getRotation().Rotation.Q
|
||||
c.orientation.setValue(r)
|
||||
@@ -377,7 +415,7 @@ class Draft_SelectPlane:
|
||||
self.finish()
|
||||
|
||||
def onClickPrevious(self):
|
||||
|
||||
"""Execute when pressing the previous button."""
|
||||
p = FreeCAD.DraftWorkingPlane
|
||||
if len(self.states) > 1:
|
||||
self.states.pop() # discard the last one
|
||||
@@ -389,32 +427,32 @@ class Draft_SelectPlane:
|
||||
FreeCADGui.Snapper.setGrid()
|
||||
self.finish()
|
||||
|
||||
def onSetGridSize(self,text):
|
||||
|
||||
def onSetGridSize(self, text):
|
||||
"""Execute when setting the grid size."""
|
||||
try:
|
||||
q = FreeCAD.Units.Quantity(text)
|
||||
except:
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
self.param.SetFloat("gridSpacing",q.Value)
|
||||
if hasattr(FreeCADGui,"Snapper"):
|
||||
self.param.SetFloat("gridSpacing", q.Value)
|
||||
if hasattr(FreeCADGui, "Snapper"):
|
||||
FreeCADGui.Snapper.setGrid()
|
||||
|
||||
def onSetMainline(self,i):
|
||||
|
||||
def onSetMainline(self, i):
|
||||
"""Execute when setting main line grid spacing."""
|
||||
if i > 1:
|
||||
self.param.SetInt("gridEvery",i)
|
||||
if hasattr(FreeCADGui,"Snapper"):
|
||||
self.param.SetInt("gridEvery", i)
|
||||
if hasattr(FreeCADGui, "Snapper"):
|
||||
FreeCADGui.Snapper.setGrid()
|
||||
|
||||
def onSetSnapRadius(self,i):
|
||||
|
||||
self.param.SetInt("snapRange",i)
|
||||
def onSetSnapRadius(self, i):
|
||||
"""Execute when setting the snap radius."""
|
||||
self.param.SetInt("snapRange", i)
|
||||
if hasattr(FreeCADGui, "Snapper"):
|
||||
FreeCADGui.Snapper.showradius()
|
||||
|
||||
def display(self,arg):
|
||||
"""Set the text of the working plane button."""
|
||||
def display(self, arg):
|
||||
"""Set the text of the working plane button in the toolbar."""
|
||||
o = self.getOffset()
|
||||
if o:
|
||||
if o > 0:
|
||||
@@ -423,20 +461,33 @@ class Draft_SelectPlane:
|
||||
suffix = ' -O'
|
||||
else:
|
||||
suffix = ''
|
||||
vdir = FreeCAD.DraftWorkingPlane.axis
|
||||
vdir = '('+str(vdir.x)[:4]+','+str(vdir.y)[:4]+','+str(vdir.z)[:4]+')'
|
||||
vdir = " "+translate("draft","Dir")+": "+vdir
|
||||
if type(arg).__name__ == 'str':
|
||||
self.wpButton.setText(arg+suffix)
|
||||
_vdir = FreeCAD.DraftWorkingPlane.axis
|
||||
vdir = '('
|
||||
vdir += str(_vdir.x)[:4] + ','
|
||||
vdir += str(_vdir.y)[:4] + ','
|
||||
vdir += str(_vdir.z)[:4]
|
||||
vdir += ')'
|
||||
|
||||
vdir = " " + translate("draft", "Dir") + ": " + vdir
|
||||
if type(arg).__name__ == 'str':
|
||||
self.wpButton.setText(arg + suffix)
|
||||
if o != 0:
|
||||
o = " "+translate("draft","Offset")+": "+str(o)
|
||||
o = " " + translate("draft", "Offset") + ": " + str(o)
|
||||
else:
|
||||
o = ""
|
||||
self.wpButton.setToolTip(translate("draft", "Current working plane")+": "+self.wpButton.text()+o+vdir)
|
||||
_tool = translate("draft", "Current working plane") + ": "
|
||||
_tool += self.wpButton.text() + o + vdir
|
||||
self.wpButton.setToolTip(_tool)
|
||||
elif type(arg).__name__ == 'Vector':
|
||||
plv = '('+str(arg.x)[:6]+','+str(arg.y)[:6]+','+str(arg.z)[:6]+')'
|
||||
self.wpButton.setText(translate("draft","Custom"))
|
||||
self.wpButton.setToolTip(translate("draft", "Current working plane")+": "+plv+vdir)
|
||||
plv = '('
|
||||
plv += str(arg.x)[:6] + ','
|
||||
plv += str(arg.y)[:6] + ','
|
||||
plv += str(arg.z)[:6]
|
||||
plv += ')'
|
||||
self.wpButton.setText(translate("draft", "Custom"))
|
||||
_tool = translate("draft", "Current working plane")
|
||||
_tool += ": " + plv + vdir
|
||||
self.wpButton.setToolTip(_tool)
|
||||
p = FreeCAD.DraftWorkingPlane
|
||||
self.states.append([p.u, p.v, p.axis, p.position])
|
||||
FreeCADGui.doCommandGui("FreeCADGui.Snapper.setGrid()")
|
||||
@@ -446,23 +497,26 @@ class SelectPlane_TaskPanel:
|
||||
"""The task panel definition of the Draft_SelectPlane command."""
|
||||
|
||||
def __init__(self):
|
||||
|
||||
import Draft_rc
|
||||
self.form = FreeCADGui.PySideUic.loadUi(":/ui/TaskSelectPlane.ui")
|
||||
|
||||
def getStandardButtons(self):
|
||||
|
||||
"""Execute to set the standard buttons."""
|
||||
return 2097152 # int(QtGui.QDialogButtonBox.Close)
|
||||
|
||||
|
||||
class Draft_SetWorkingPlaneProxy():
|
||||
"""The Draft_SetWorkingPlaneProxy FreeCAD command definition"""
|
||||
class Draft_SetWorkingPlaneProxy:
|
||||
"""The Draft_SetWorkingPlaneProxy FreeCAD command definition."""
|
||||
|
||||
def GetResources(self):
|
||||
"""Set icon, menu and tooltip."""
|
||||
return {'Pixmap': 'Draft_SelectPlane',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Draft_SetWorkingPlaneProxy", "Create Working Plane Proxy"),
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Draft_SetWorkingPlaneProxy", "Creates a proxy object from the current working plane")}
|
||||
_menu = "Create Working Plane Proxy"
|
||||
_tip = "Creates a proxy object from the current working plane"
|
||||
d = {'Pixmap': 'Draft_SelectPlane',
|
||||
'MenuText': QT_TRANSLATE_NOOP("Draft_SetWorkingPlaneProxy",
|
||||
_menu),
|
||||
'ToolTip': QT_TRANSLATE_NOOP("Draft_SetWorkingPlaneProxy",
|
||||
_tip)}
|
||||
return d
|
||||
|
||||
def IsActive(self):
|
||||
"""Return True when this command should be available."""
|
||||
@@ -472,14 +526,18 @@ class Draft_SetWorkingPlaneProxy():
|
||||
return False
|
||||
|
||||
def Activated(self):
|
||||
"""Execute this when the command is called."""
|
||||
"""Execute when the command is called."""
|
||||
if hasattr(FreeCAD, "DraftWorkingPlane"):
|
||||
FreeCAD.ActiveDocument.openTransaction("Create WP proxy")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.makeWorkingPlaneProxy(FreeCAD.DraftWorkingPlane.getPlacement())")
|
||||
_cmd = "Draft.makeWorkingPlaneProxy("
|
||||
_cmd += "FreeCAD.DraftWorkingPlane.getPlacement()"
|
||||
_cmd += ")"
|
||||
FreeCADGui.doCommand(_cmd)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
|
||||
|
||||
FreeCADGui.addCommand('Draft_SelectPlane', Draft_SelectPlane())
|
||||
FreeCADGui.addCommand('Draft_SetWorkingPlaneProxy', Draft_SetWorkingPlaneProxy())
|
||||
FreeCADGui.addCommand('Draft_SetWorkingPlaneProxy',
|
||||
Draft_SetWorkingPlaneProxy())
|
||||
|
||||
Reference in New Issue
Block a user