Salome HOME
Issue #2750: Wrong GUI of Filling property panel
[modules/shaper.git] / src / BuildPlugin / Test / TestFilling_Mixed.py
1 ## Copyright (C) 2017-20xx  CEA/DEN, EDF R&D
2 ##
3 ## This library is free software; you can redistribute it and/or
4 ## modify it under the terms of the GNU Lesser General Public
5 ## License as published by the Free Software Foundation; either
6 ## version 2.1 of the License, or (at your option) any later version.
7 ##
8 ## This library is distributed in the hope that it will be useful,
9 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
10 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 ## Lesser General Public License for more details.
12 ##
13 ## You should have received a copy of the GNU Lesser General Public
14 ## License along with this library; if not, write to the Free Software
15 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 ##
17 ## See http:##www.salome-platform.org/ or
18 ## email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
19 ##
20
21 # Initialization of the test
22 from ModelAPI import *
23 from GeomDataAPI import *
24 from GeomAlgoAPI import *
25 from GeomAPI import *
26
27 # Get document
28 aSession = ModelAPI_Session.get()
29 aDocument = aSession.moduleDocument()
30
31 # Create a part
32 aSession.startOperation()
33 aPartFeature = aDocument.addFeature("Part")
34 aSession.finishOperation()
35 aPartResult = modelAPI_ResultPart(aPartFeature.firstResult())
36 aPart = aPartResult.partDoc()
37
38 # Create first edge in a sketch
39 aSession.startOperation()
40 aSketch1 = featureToCompositeFeature(aPart.addFeature("Sketch"))
41 anOrigin = geomDataAPI_Point(aSketch1.attribute("Origin"))
42 anOrigin.setValue(0, 0, 0)
43 aDirX = geomDataAPI_Dir(aSketch1.attribute("DirX"))
44 aDirX.setValue(1, 0, 0)
45 aNorm = geomDataAPI_Dir(aSketch1.attribute("Norm"))
46 aNorm.setValue(0, 0, 1)
47 # an arc
48 anArc = aSketch1.addFeature("SketchArc")
49 anArcCenter = geomDataAPI_Point2D(anArc.attribute("center_point"))
50 anArcCenter.setValue(1, 1)
51 anArcStartPoint = geomDataAPI_Point2D(anArc.attribute("start_point"))
52 anArcStartPoint.setValue(20, 5)
53 anArcEndPoint = geomDataAPI_Point2D(anArc.attribute("end_point"))
54 anArcEndPoint.setValue(5, 20)
55 aSession.finishOperation()
56 aSketch1Result = aSketch1.firstResult()
57
58 # Create a wire in another sketch
59 aSession.startOperation()
60 aSketch2 = featureToCompositeFeature(aPart.addFeature("Sketch"))
61 anOrigin = geomDataAPI_Point(aSketch2.attribute("Origin"))
62 anOrigin.setValue(0, 0, 0)
63 aDirX = geomDataAPI_Dir(aSketch2.attribute("DirX"))
64 aDirX.setValue(1, 0, 0)
65 aNorm = geomDataAPI_Dir(aSketch2.attribute("Norm"))
66 aNorm.setValue(0, 0.7071067811865475, 0.7071067811865475)
67 # line 1
68 aLine1 = aSketch2.addFeature("SketchLine")
69 aLineStartPoint = geomDataAPI_Point2D(aLine1.attribute("StartPoint"))
70 aLineStartPoint.setValue(0, 0)
71 aLineEndPoint = geomDataAPI_Point2D(aLine1.attribute("EndPoint"))
72 aLineEndPoint.setValue(10, 10)
73 # line 2
74 aLine2 = aSketch2.addFeature("SketchLine")
75 aLineStartPoint = geomDataAPI_Point2D(aLine2.attribute("StartPoint"))
76 aLineStartPoint.setValue(10, 10)
77 aLineEndPoint = geomDataAPI_Point2D(aLine2.attribute("EndPoint"))
78 aLineEndPoint.setValue(30, 0)
79 aSession.finishOperation()
80 aSketch2Result = aSketch2.firstResult()
81 # a wire
82 aSession.startOperation()
83 aWire = aPart.addFeature("Wire")
84 aBaseObjectsList = aWire.selectionList("base_objects")
85 aBaseObjectsList.append(aSketch2Result, aLine1.lastResult().shape())
86 aBaseObjectsList.append(aSketch2Result, aLine2.lastResult().shape())
87 aSession.finishOperation()
88
89 # Create filling
90 aSession.startOperation()
91 aFillingFeature = aPart.addFeature("Filling")
92 aFillingFeature.string("advanced_options").setValue("")
93 aBaseObjectsList = aFillingFeature.selectionList("base_objects")
94 aBaseObjectsList.append(aSketch1Result, anArc.lastResult().shape())
95 aSession.finishOperation()
96
97 # =============================================================================
98 # Test 1. Filling on one edge is failed (no result is built)
99 # =============================================================================
100 assert(len(aFillingFeature.results()) == 0)
101
102 # =============================================================================
103 # Test 2. Add a wire, filling should be completed
104 # =============================================================================
105 aSession.startOperation()
106 aBaseObjectsList.append(aWire.lastResult(), None)
107 aSession.finishOperation()
108 assert(len(aFillingFeature.results()) > 0)
109
110 # =============================================================================
111 # Test 3. Change parameters one-by-one and check validity of result
112 # =============================================================================
113 aSession.startOperation()
114 aFillingFeature.string("advanced_options").setValue("true")
115 aSession.finishOperation()
116 orientations = ["auto_correct", "curve_info", "edge_orient"]
117 tolerances = [0.0001, 0.001]
118 for ori in orientations:
119   for minDeg in range(2, 4):
120     for maxDeg in range(5, 7):
121       for nbIter in range(0, 3, 2):
122         for tol2d in tolerances:
123           for tol3d in tolerances:
124             for approx in [False, True]:
125               aSession.startOperation()
126               aFillingFeature.string("orientation").setValue(ori)
127               aFillingFeature.integer("min_degree").setValue(minDeg)
128               aFillingFeature.integer("max_degree").setValue(maxDeg)
129               aFillingFeature.integer("nb_iter").setValue(nbIter)
130               aFillingFeature.real("tol_2d").setValue(tol2d)
131               aFillingFeature.real("tol_3d").setValue(tol3d)
132               aFillingFeature.boolean("approximation").setValue(approx)
133               aSession.finishOperation()
134               assert(len(aFillingFeature.results()) > 0), "Filling feature failed with parameters:\n  orientation={}\n  min deg={}\n  max deg={}\n  nb iter={}\n  tol 2d={}\n  tol 3d={}\n  approximation={}".format(ori, minDeg, maxDeg, nbIter, tol2d, tol3d, approx)
135
136 # =============================================================================
137 # Test 4. Discard parameters to default and add one more edge
138 # =============================================================================
139 aSession.startOperation()
140 aFillingFeature.string("advanced_options").setValue("")
141 aSession.finishOperation()
142 # new arc
143 aSession.startOperation()
144 anArc2 = aSketch1.addFeature("SketchArc")
145 anArc2Center = geomDataAPI_Point2D(anArc2.attribute("center_point"))
146 anArc2Center.setValue(0, -5)
147 anArc2StartPoint = geomDataAPI_Point2D(anArc2.attribute("start_point"))
148 anArc2StartPoint.setValue(-20, -5)
149 anArc2EndPoint = geomDataAPI_Point2D(anArc2.attribute("end_point"))
150 anArc2EndPoint.setValue(20, -5)
151 aSession.finishOperation()
152 aSketch1Result = aSketch1.firstResult()
153 # an edge
154 aSession.startOperation()
155 aPart.setCurrentFeature(aWire, True)
156 anEdge = aPart.addFeature("Edge")
157 anEdgeObjectsList = anEdge.selectionList("base_objects")
158 anEdgeObjectsList.append(aSketch1Result, anArc2.lastResult().shape())
159 aSession.finishOperation()
160 # update filling
161 aSession.startOperation()
162 aPart.setCurrentFeature(aFillingFeature, True)
163 aBaseObjectsList.append(anEdge.lastResult(), None)
164 aSession.finishOperation()
165 assert(len(aFillingFeature.results()) > 0)
166
167 from salome.shaper import model
168 assert(model.checkPythonDump())