Salome HOME
Merge branch 'master' into cgt/devCEA
[modules/shaper.git] / src / SketchPlugin / Test / TestConstraintMiddlePoint.py
1 """
2     TestConstraintCoincidence.py
3     Unit test of SketchPlugin_ConstraintCoincidence class
4
5     SketchPlugin_Constraint
6         static const std::string MY_CONSTRAINT_VALUE("ConstraintValue");
7         static const std::string MY_FLYOUT_VALUE_PNT("ConstraintFlyoutValuePnt");
8         static const std::string MY_ENTITY_A("ConstraintEntityA");
9         static const std::string MY_ENTITY_B("ConstraintEntityB");
10         static const std::string MY_ENTITY_C("ConstraintEntityC");
11         static const std::string MY_ENTITY_D("ConstraintEntityD");
12
13     SketchPlugin_ConstraintCoincidence
14         static const std::string MY_CONSTRAINT_COINCIDENCE_ID("SketchConstraintCoincidence");
15         data()->addAttribute(SketchPlugin_Constraint::ENTITY_A(), ModelAPI_AttributeRefAttr::typeId());
16         data()->addAttribute(SketchPlugin_Constraint::ENTITY_B(), ModelAPI_AttributeRefAttr::typeId());
17
18 """
19 from GeomDataAPI import *
20 from ModelAPI import *
21 import math
22 #=========================================================================
23 # Initialization of the test
24 #=========================================================================
25
26 __updated__ = "2016-01-29"
27 TOLERANCE = 1.e-7
28
29
30 #=========================================================================
31 # Auxiliary functions
32 #=========================================================================
33 def checkMiddlePoint(point, line):
34     aStart = geomDataAPI_Point2D(line.attribute("StartPoint"))
35     aEnd   = geomDataAPI_Point2D(line.attribute("EndPoint"))
36     assert math.fabs(aStart.x() + aEnd.x() - 2.0 * point.x()) <= TOLERANCE, "x1={0}, x2={1}, mid={2}".format(aStart.x(), aEnd.x(), point.x())
37     assert math.fabs(aStart.y() + aEnd.y() - 2.0 * point.y()) <= TOLERANCE, "y1={0}, y2={1}, mid={2}".format(aStart.y(), aEnd.y(), point.y())
38
39
40 #=========================================================================
41 # Start of test
42 #=========================================================================
43 aSession = ModelAPI_Session.get()
44 aDocument = aSession.moduleDocument()
45 # add an origin
46 aSession.startOperation()
47 aFeature = aDocument.addFeature("Point")
48 # aFeature.string("creation_method").setValue("by_xyz")
49 aFeature.real("x").setValue(0.)
50 aFeature.real("y").setValue(0.)
51 aFeature.real("z").setValue(0.)
52 anOriginName = aFeature.name()
53 aSession.finishOperation()
54 #=========================================================================
55 # Creation of a sketch
56 #=========================================================================
57 aSession.startOperation()
58 aSketchFeature = featureToCompositeFeature(aDocument.addFeature("Sketch"))
59 origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
60 origin.setValue(0, 0, 0)
61 dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
62 dirx.setValue(1, 0, 0)
63 norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
64 norm.setValue(0, 0, 1)
65 aSession.finishOperation()
66 #=========================================================================
67 # Create a two lines
68 #=========================================================================
69 aSession.startOperation()
70 aLine1 = aSketchFeature.addFeature("SketchLine")
71 aStartPoint1 = geomDataAPI_Point2D(aLine1.attribute("StartPoint"))
72 aEndPoint1 = geomDataAPI_Point2D(aLine1.attribute("EndPoint"))
73 aStartPoint1.setValue(50., 0.)
74 aEndPoint1.setValue(100., 25.)
75 aLine2 = aSketchFeature.addFeature("SketchLine")
76 aStartPoint2 = geomDataAPI_Point2D(aLine2.attribute("StartPoint"))
77 aEndPoint2 = geomDataAPI_Point2D(aLine2.attribute("EndPoint"))
78 aStartPoint2.setValue(10., 100.)
79 aEndPoint2.setValue(100., 25.)
80 aSession.finishOperation()
81 #=========================================================================
82 # Make end point of second line middle point on first line
83 #=========================================================================
84 aSession.startOperation()
85 aConstraint = aSketchFeature.addFeature("SketchConstraintMiddle")
86 reflistA = aConstraint.refattr("ConstraintEntityA")
87 reflistB = aConstraint.refattr("ConstraintEntityB")
88 reflistA.setAttr(aEndPoint2)
89 reflistB.setObject(aLine1.lastResult())
90 aConstraint.execute()
91 aSession.finishOperation()
92 #=========================================================================
93 # Check values and move one constrainted object
94 #=========================================================================
95 checkMiddlePoint(aEndPoint2, aLine1)
96 deltaX, deltaY = -80.0, -40.0
97 aSession.startOperation()
98 aStartPoint1.setValue(aStartPoint1.x() + deltaX, aStartPoint1.y() + deltaY)
99 aSession.finishOperation()
100 checkMiddlePoint(aEndPoint2, aLine1)
101 #=========================================================================
102 # Remove constraint and move the line
103 #=========================================================================
104 aCurX, aCurY = aEndPoint2.x(), aEndPoint2.y()
105 aSession.startOperation()
106 aDocument.removeFeature(aConstraint)
107 aSession.finishOperation()
108 aSession.startOperation()
109 aEndPoint1.setValue(90., 0.)
110 aSession.finishOperation()
111 assert (aEndPoint2.x() == aCurX and aEndPoint2.y() == aCurY)
112
113 #=========================================================================
114 # Set external point as a middle point
115 #=========================================================================
116 # create origin
117 aSession.startOperation()
118 anOrigRes = modelAPI_Result(aDocument.objectByName("Construction", anOriginName))
119 assert (anOrigRes)
120 anOrigShape = anOrigRes.shape()
121 assert (anOrigShape)
122 anOrigin = aSketchFeature.addFeature("SketchPoint")
123 anOriginCoord = geomDataAPI_Point2D(anOrigin.attribute("PointCoordindates"))
124 anOriginCoord.setValue(0., 0.)
125 anOrigin.selection("External").setValue(anOrigRes, anOrigShape)
126 aSession.finishOperation()
127 # middle point constraint
128 aSession.startOperation()
129 aConstraint = aSketchFeature.addFeature("SketchConstraintMiddle")
130 reflistA = aConstraint.refattr("ConstraintEntityA")
131 reflistB = aConstraint.refattr("ConstraintEntityB")
132 reflistA.setObject(aLine2.lastResult())
133 reflistB.setObject(anOrigin.lastResult())
134 aSession.finishOperation()
135 checkMiddlePoint(anOriginCoord, aLine2)
136 #=========================================================================
137 # Check origin coordinates does not changed
138 #=========================================================================
139 assert (anOriginCoord.x() == 0. and anOriginCoord.y() == 0.)
140 #=========================================================================
141 # End of test
142 #=========================================================================
143
144 from salome.shaper import model
145 assert(model.checkPythonDump())