forked from hamish2014/FreeCAD_drawing_dimensioning
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcircularDimension.py
76 lines (67 loc) · 3.47 KB
/
circularDimension.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from dimensioning import *
from dimensioning import __dir__ # not imported with * directive
import selectionOverlay, previewDimension
from dimensionSvgConstructor import circularDimensionSVG
dimensioning = DimensioningProcessTracker()
def selectFun( event, referer, elementXML, elementParms, elementViewObject ):
x,y = elementParms['x'], elementParms['y']
dimensioning.point1 = x, y
debugPrint(2, 'center selected at x=%3.1f y=%3.1f' % (x,y))
dimensioning.radius = elementParms['r']
dimensioning.dimScale = 1/elementXML.rootNode().scaling()
dimensioning.stage = 1
selectionOverlay.hideSelectionGraphicsItems()
previewDimension.initializePreview( dimensioning.drawingVars, clickFunPreview, hoverFunPreview )
def clickFunPreview( x, y ):
if dimensioning.stage == 1:
dimensioning.point2 = x,y
debugPrint(2, 'dimension radial direction point set to x=%3.1f y=%3.1f' % (x,y))
dimensioning.stage = 2
return None, None
elif dimensioning.stage == 2:
dimensioning.point3 = x, y
debugPrint(2, 'radius dimension tail defining point set to x=%3.1f y=%3.1f' % (x,y))
dimensioning.stage = 3
return None, None
else:
XML = circularDimensionSVG( dimensioning.point1[0], dimensioning.point1[1], dimensioning.radius,
dimensioning.point2[0], dimensioning.point2[1],
dimensioning.point3[0], dimensioning.point3[1],
x, y, dimScale=dimensioning.dimScale)
return findUnusedObjectName('dim'), XML
def hoverFunPreview( x, y):
if dimensioning.stage == 1:
return circularDimensionSVG( dimensioning.point1[0], dimensioning.point1[1], dimensioning.radius, x, y, dimScale=dimensioning.dimScale, **dimensioning.svg_preview_KWs )
elif dimensioning.stage == 2:
return circularDimensionSVG( dimensioning.point1[0], dimensioning.point1[1], dimensioning.radius,
dimensioning.point2[0], dimensioning.point2[1], x, y, dimScale=dimensioning.dimScale, **dimensioning.svg_preview_KWs )
else:
return circularDimensionSVG( dimensioning.point1[0], dimensioning.point1[1], dimensioning.radius,
dimensioning.point2[0], dimensioning.point2[1],
dimensioning.point3[0], dimensioning.point3[1],
x, y, dimScale=dimensioning.dimScale,**dimensioning.svg_preview_KWs )
maskPen = QtGui.QPen( QtGui.QColor(0,255,0,100) )
maskPen.setWidth(2.0)
maskHoverPen = QtGui.QPen( QtGui.QColor(0,255,0,255) )
maskHoverPen.setWidth(2.0)
class circularDimension:
def Activated(self):
V = getDrawingPageGUIVars()
dimensioning.activate(V)
selectionOverlay.generateSelectionGraphicsItems(
[obj for obj in V.page.Group if not obj.Name.startswith('dim')],
selectFun ,
transform = V.transform,
sceneToAddTo = V.graphicsScene,
doCircles=True, doFittedCircles=True,
maskPen=maskPen,
maskHoverPen=maskHoverPen,
maskBrush = QtGui.QBrush() #clear
)
def GetResources(self):
return {
'Pixmap' : os.path.join( __dir__ , 'circularDimension.svg' ) ,
'MenuText': 'Circular Dimension',
'ToolTip': 'Creates a circular dimension'
}
FreeCADGui.addCommand('circularDimension', circularDimension())