5 from GeomDataAPI import *
12 #=========================================================================
14 #=========================================================================
15 def mirrorDiagonal(theSketch, allLines):
17 for aLine in allLines:
18 aStartPoint = geomDataAPI_Point2D(aLine.attribute("StartPoint"))
19 anEndPoint = geomDataAPI_Point2D(aLine.attribute("EndPoint"))
21 aNewLine = aSketchFeature.addFeature("SketchLine")
22 aNewStartPoint = geomDataAPI_Point2D(aNewLine.attribute("StartPoint"))
23 aNewEndPoint = geomDataAPI_Point2D(aNewLine.attribute("EndPoint"))
24 aNewStartPoint.setValue(aStartPoint.y(), aStartPoint.x())
25 aNewEndPoint.setValue(anEndPoint.y(), anEndPoint.x())
26 result.append(aNewLine)
27 allLines.extend(result)
30 def mirrorX(theSketch, allLines):
32 for aLine in allLines:
33 aStartPoint = geomDataAPI_Point2D(aLine.attribute("StartPoint"))
34 anEndPoint = geomDataAPI_Point2D(aLine.attribute("EndPoint"))
36 aNewLine = aSketchFeature.addFeature("SketchLine")
37 aNewStartPoint = geomDataAPI_Point2D(aNewLine.attribute("StartPoint"))
38 aNewEndPoint = geomDataAPI_Point2D(aNewLine.attribute("EndPoint"))
39 aNewStartPoint.setValue(aStartPoint.x() * -1., aStartPoint.y())
40 aNewEndPoint.setValue(anEndPoint.x() * -1., anEndPoint.y())
41 result.append(aNewLine)
42 allLines.extend(result)
45 def mirrorY(theSketch, allLines):
47 for aLine in allLines:
48 aStartPoint = geomDataAPI_Point2D(aLine.attribute("StartPoint"))
49 anEndPoint = geomDataAPI_Point2D(aLine.attribute("EndPoint"))
51 aNewLine = aSketchFeature.addFeature("SketchLine")
52 aNewStartPoint = geomDataAPI_Point2D(aNewLine.attribute("StartPoint"))
53 aNewEndPoint = geomDataAPI_Point2D(aNewLine.attribute("EndPoint"))
54 aNewStartPoint.setValue(aStartPoint.x(), aStartPoint.y() * -1.)
55 aNewEndPoint.setValue(anEndPoint.x(), anEndPoint.y() * -1.)
56 result.append(aNewLine)
57 allLines.extend(result)
60 def initContour(theNumLines):
63 deltaY = random.uniform(20, 25)
64 for i in xrange(1, theNumLines):
65 rangeXMax = (prevPoint[1] + deltaY) * (30. / i if i % 2 != 0 else 2)
66 newX = random.uniform(prevPoint[1] + deltaY,
67 max(rangeXMax, prevPoint[1] + deltaY + 25.))
68 newPoint = (round(newX, 4), round(prevPoint[1] + deltaY, 4))
69 result.append((prevPoint, newPoint))
72 result.append((prevPoint, (prevPoint[1], prevPoint[1])))
76 def makeLinesCoincident(theSketch, allLines):
77 allPoints = collections.defaultdict(list)
78 for aLine in allLines:
79 aStartPoint = geomDataAPI_Point2D(aLine.attribute("StartPoint"))
80 anEndPoint = geomDataAPI_Point2D(aLine.attribute("EndPoint"))
81 aStartPointValue = (aStartPoint.x(), aStartPoint.y())
82 anEndPointValue = (anEndPoint.x(), anEndPoint.y())
83 allPoints[aStartPointValue].append(aStartPoint)
84 allPoints[anEndPointValue].append(anEndPoint)
85 for keyPoint, valuePoints in allPoints.iteritems():
86 if len(valuePoints) != 2:
87 print "Strange point: ", keyPoint, "has in coincidence: ", len(valuePoints)
89 aConstraint = theSketch.addFeature("SketchConstraintCoincidence")
90 aConstraint.refattr("ConstraintEntityA").setAttr(valuePoints[0])
91 aConstraint.refattr("ConstraintEntityB").setAttr(valuePoints[1])
94 #=========================================================================
95 # Initialization of the test
96 #=========================================================================
98 __updated__ = "2014-11-27"
100 aSession = ModelAPI_Session.get()
101 aDocument = aSession.moduleDocument()
102 #=========================================================================
103 # Creation of a sketch
104 #=========================================================================
105 aSession.startOperation()
106 aSketchCommonFeature = aDocument.addFeature("Sketch")
107 aSketchFeature = modelAPI_CompositeFeature(aSketchCommonFeature)
108 origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
109 origin.setValue(0, 0, 0)
110 dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
111 dirx.setValue(1, 0, 0)
112 diry = geomDataAPI_Dir(aSketchFeature.attribute("DirY"))
113 diry.setValue(0, 1, 0)
114 norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
115 norm.setValue(0, 0, 1)
116 #=========================================================================
117 # 1 With the predefined contour or a new random generated in X0Y
118 # 2 Make complete contour using the diagonal, X and Y mirror symmetry
119 # 3 Link all lines in contour with coincidence
120 #=========================================================================
121 initialContour = [((35, 0), (134.8224, 22.0494)), ((134.8224, 22.0494), (71.987, 44.0988)),
122 ((71.987, 44.0988), (205.1448, 66.1482)), ((205.1448, 66.1482), (127.862, 88.1976)),
123 ((127.862, 88.1976), (416.861, 110.247)), ((416.861, 110.247), (233.0475, 132.2964)),
124 ((233.0475, 132.2964), (251.1518, 154.3458)), ((251.1518, 154.3458), (351.0993, 176.3952)),
125 ((351.0993, 176.3952), (432.3397, 198.4446)), ((432.3397, 198.4446), (223.3246, 220.494)),
126 ((223.3246, 220.494), (617.4069, 242.5434)), ((617.4069, 242.5434), (479.6524, 264.5928)),
127 ((479.6524, 264.5928), (453.5778, 286.6422)), ((453.5778, 286.6422), (541.3463, 308.6916)),
128 ((541.3463, 308.6916), (564.5509, 330.741)), ((564.5509, 330.741), (636.9284, 352.7904)),
129 ((636.9284, 352.7904), (383.5946, 374.8398)), ((383.5946, 374.8398), (403.3764, 396.8892)),
130 ((403.3764, 396.8892), (463.9447, 418.9386)), ((463.9447, 418.9386), (669.1751, 440.988)),
131 ((669.1751, 440.988), (602.2044, 463.0374)), ((602.2044, 463.0374), (942.0456, 485.0868)),
132 ((942.0456, 485.0868), (526.574, 507.1362)), ((526.574, 507.1362), (826.3619, 529.1856)),
133 ((826.3619, 529.1856), (576.9488, 551.235)), ((576.9488, 551.235), (624.5595, 573.2844)),
134 ((624.5595, 573.2844), (648.7146, 595.3338)), ((648.7146, 595.3338), (1194.6944, 617.3832)),
135 ((1194.6944, 617.3832), (646.6597, 639.4326)), ((646.6597, 639.4326), (839.8201, 661.482)),
136 ((839.8201, 661.482), (690.7487, 683.5314)), ((690.7487, 683.5314), (1350.2538, 705.5808)),
137 ((1350.2538, 705.5808), (731.0722, 727.6302)), ((731.0722, 727.6302), (1324.0992, 749.6796)),
138 ((1324.0992, 749.6796), (790.4873, 771.729)), ((790.4873, 771.729), (813.9883, 793.7784)),
139 ((813.9883, 793.7784), (828.9997, 815.8278)), ((828.9997, 815.8278), (1321.9798, 837.8772)),
140 ((1321.9798, 837.8772), (872.1503, 859.9266)), ((872.1503, 859.9266), (859.9266, 859.9266))]
143 # initialContour = initContour(40)
145 for begin, end in initialContour:
146 aNewLine = aSketchFeature.addFeature("SketchLine")
147 aStartPoint = geomDataAPI_Point2D(aNewLine.attribute("StartPoint"))
148 anEndPoint = geomDataAPI_Point2D(aNewLine.attribute("EndPoint"))
149 aStartPoint.setValue(begin[0], begin[1])
150 anEndPoint.setValue(end[0], end[1])
151 allLines.append(aNewLine)
152 mirrorDiagonal(aSketchFeature, allLines)
153 mirrorX(aSketchFeature, allLines)
154 mirrorY(aSketchFeature, allLines)
155 makeLinesCoincident(aSketchFeature, allLines)
156 aSession.finishOperation()
157 #=========================================================================
159 #=========================================================================