Salome HOME
39475c048a0ffeab07e274d13aeea5702a5575b3
[modules/shaper.git] / src / PythonFeaturesPlugin / sketch.py
1 from ModelAPI import *
2 from GeomDataAPI import *
3
4
5 # Initialization of the Sketch
6 # ----------------------------
7
8 def addTo(doc):
9     return featureToCompositeFeature(doc.addFeature("Sketch"))
10
11
12 def setXOYPlane(sketch):
13     geomDataAPI_Point(sketch.attribute("Origin")).setValue(0, 0, 0)
14     geomDataAPI_Dir(sketch.attribute("DirX")).setValue(1, 0, 0)
15     geomDataAPI_Dir(sketch.attribute("DirY")).setValue(0, 1, 0)
16     geomDataAPI_Dir(sketch.attribute("Norm")).setValue(0, 0, 1)
17
18
19 # Point geometry
20 # --------------
21
22 def addPoint(x, y, sketch):
23     point = sketch.addFeature("SketchPoint")
24     geomDataAPI_Point2D(point.attribute("PointCoordindates")).setValue(x, y)
25     # Required to get the result, if needed for creating constraints
26     point.execute()
27     return point
28
29
30 def getGeometry(point):
31     return geomDataAPI_Point2D(point.attribute("PointCoordindates"))
32
33
34 # Line geometry
35 # -------------
36
37 def addClosedBrokenLine(coords, sketch):
38     c0 = coords[0]
39     c1 = coords[1]
40     bl = []
41     l1 = sketch.addFeature("SketchLine")
42     geomDataAPI_Point2D(l1.attribute("StartPoint")).setValue(c0.x(), c0.y())
43     geomDataAPI_Point2D(l1.attribute("EndPoint")).setValue(c1.x(), c1.y())
44     l1.execute()
45     bl.append(l1)
46     l0 = l1
47
48     for c2 in coords[2:]:
49         l2 = sketch.addFeature("SketchLine")
50         geomDataAPI_Point2D(
51             l2.attribute("StartPoint")).setValue(c1.x(), c1.y())
52         geomDataAPI_Point2D(l2.attribute("EndPoint")).setValue(c2.x(), c2.y())
53         l2.execute()
54         bl.append(l2)
55         constraint = sketch.addFeature("SketchConstraintCoincidence")
56         constraint.refattr("ConstraintEntityA").setAttr(
57             l1.attribute("EndPoint"))
58         constraint.refattr("ConstraintEntityB").setAttr(
59             l2.attribute("StartPoint"))
60         c1 = c2
61         l1 = l2
62
63     if len(coords) > 2:
64         l2 = sketch.addFeature("SketchLine")
65         geomDataAPI_Point2D(
66             l2.attribute("StartPoint")).setValue(c1.x(), c1.y())
67         geomDataAPI_Point2D(l2.attribute("EndPoint")).setValue(c0.x(), c0.y())
68         l2.execute()
69         bl.append(l2)
70         constraint = sketch.addFeature("SketchConstraintCoincidence")
71         constraint.refattr("ConstraintEntityA").setAttr(
72             l1.attribute("EndPoint"))
73         constraint.refattr("ConstraintEntityB").setAttr(
74             l2.attribute("StartPoint"))
75
76         constraint = sketch.addFeature("SketchConstraintCoincidence")
77         constraint.refattr("ConstraintEntityA").setAttr(
78             l2.attribute("EndPoint"))
79         constraint.refattr("ConstraintEntityB").setAttr(
80             l0.attribute("StartPoint"))
81
82     return bl
83
84
85 def addLine(x1, y1, x2, y2, sketch):
86     line = sketch.addFeature("SketchLine")
87     geomDataAPI_Point2D(line.attribute("StartPoint")).setValue(x1, y1)
88     geomDataAPI_Point2D(line.attribute("EndPoint")).setValue(x2, y2)
89     # Required to get the result, if needed for creating constraints
90     line.execute()
91     return line
92
93
94 def getGeometry(line):
95     return modelAPI_ResultConstruction(line.firstResult())
96
97
98 def getStartPoint(line):
99     return geomDataAPI_Point2D(line.attribute("StartPoint"))
100
101
102 def getEndPoint(line):
103     return geomDataAPI_Point2D(line.attribute("EndPoint"))
104
105
106 # Constraints
107 # -----------
108
109 def makeCoincident(p1, p2, sketch):
110     constraint = sketch.addFeature("SketchConstraintCoincidence")
111     constraint.refattr("ConstraintEntityA").setAttr(p1)
112     constraint.refattr("ConstraintEntityB").setAttr(p2)
113     return constraint
114
115
116 def makeParallel(l1, l2, sketch):
117     constraint = sketch.addFeature("SketchConstraintParallel")
118     constraint.refattr("ConstraintEntityA").setObject(l1)
119     constraint.refattr("ConstraintEntityB").setObject(l2)
120     return constraint
121
122
123 def makePerpendicular(l1, l2, sketch):
124     constraint = sketch.addFeature("SketchConstraintPerpendicular")
125     constraint.refattr("ConstraintEntityA").setObject(l1)
126     constraint.refattr("ConstraintEntityB").setObject(l2)
127     return constraint
128
129
130 def makeConstantLength(line, length, sketch):
131     constraint = sketch.addFeature("SketchConstraintLength")
132     constraint.refattr("ConstraintEntityA").setObject(line)
133     constraint.real("ConstraintValue").setValue(length)
134     return constraint