1 ## Copyright (C) 2017-20xx CEA/DEN, EDF R&D
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.
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.
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
17 ## See http:##www.salome-platform.org/ or
18 ## email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
21 # Initialization of the test
22 from ModelAPI import *
23 from GeomDataAPI import *
24 from GeomAlgoAPI import *
28 aSession = ModelAPI_Session.get()
29 aDocument = aSession.moduleDocument()
32 aSession.startOperation()
33 aPartFeature = aDocument.addFeature("Part")
34 aSession.finishOperation()
35 aPartResult = modelAPI_ResultPart(aPartFeature.firstResult())
36 aPart = aPartResult.partDoc()
38 # Create first wire 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)
48 anArc1 = aSketch1.addFeature("SketchArc")
49 anArcCenter = geomDataAPI_Point2D(anArc1.attribute("center_point"))
50 anArcCenter.setValue(1, 1)
51 anArcStartPoint = geomDataAPI_Point2D(anArc1.attribute("start_point"))
52 anArcStartPoint.setValue(20, 5)
53 anArcEndPoint = geomDataAPI_Point2D(anArc1.attribute("end_point"))
54 anArcEndPoint.setValue(5, 20)
56 anArc2 = aSketch1.addFeature("SketchArc")
57 anArcCenter = geomDataAPI_Point2D(anArc2.attribute("center_point"))
58 anArcCenter.setValue(12.5, 12.5)
59 anArcStartPoint = geomDataAPI_Point2D(anArc2.attribute("start_point"))
60 anArcStartPoint.setValue(5, 20)
61 anArcEndPoint = geomDataAPI_Point2D(anArc2.attribute("end_point"))
62 anArcEndPoint.setValue(20, 5)
63 aSession.finishOperation()
64 aSketch1Result = aSketch1.firstResult()
66 aSession.startOperation()
67 aWire1 = aPart.addFeature("Wire")
68 aBaseObjectsList = aWire1.selectionList("base_objects")
69 aBaseObjectsList.append(aSketch1Result, anArc1.lastResult().shape())
70 aBaseObjectsList.append(aSketch1Result, anArc2.lastResult().shape())
71 aSession.finishOperation()
73 # Create second wire in another sketch
74 aSession.startOperation()
75 aSketch2 = featureToCompositeFeature(aPart.addFeature("Sketch"))
76 anOrigin = geomDataAPI_Point(aSketch2.attribute("Origin"))
77 anOrigin.setValue(0, 0, 0)
78 aDirX = geomDataAPI_Dir(aSketch2.attribute("DirX"))
79 aDirX.setValue(1, 0, 0)
80 aNorm = geomDataAPI_Dir(aSketch2.attribute("Norm"))
81 aNorm.setValue(0, 0.7071067811865475, 0.7071067811865475)
83 aLine1 = aSketch2.addFeature("SketchLine")
84 aLineStartPoint = geomDataAPI_Point2D(aLine1.attribute("StartPoint"))
85 aLineStartPoint.setValue(30, 0)
86 aLineEndPoint = geomDataAPI_Point2D(aLine1.attribute("EndPoint"))
87 aLineEndPoint.setValue(20, 20)
89 aLine2 = aSketch2.addFeature("SketchLine")
90 aLineStartPoint = geomDataAPI_Point2D(aLine2.attribute("StartPoint"))
91 aLineStartPoint.setValue(20, 20)
92 aLineEndPoint = geomDataAPI_Point2D(aLine2.attribute("EndPoint"))
93 aLineEndPoint.setValue(20, 0)
94 aSession.finishOperation()
95 aSketch2Result = aSketch2.firstResult()
97 aSession.startOperation()
98 aWire2 = aPart.addFeature("Wire")
99 aBaseObjectsList = aWire2.selectionList("base_objects")
100 aBaseObjectsList.append(aSketch2Result, aLine1.lastResult().shape())
101 aBaseObjectsList.append(aSketch2Result, aLine2.lastResult().shape())
102 aSession.finishOperation()
105 aSession.startOperation()
106 aFillingFeature = aPart.addFeature("Filling")
107 aBaseObjectsList = aFillingFeature.selectionList("base_objects")
108 aBaseObjectsList.append(aWire1.lastResult(), None)
109 aSession.finishOperation()
111 # =============================================================================
112 # Test 1. Filling on one wire is failed (no result is built)
113 # =============================================================================
114 assert(len(aFillingFeature.results()) == 0)
116 # =============================================================================
117 # Test 2. Add another wire, filling should be completed
118 # =============================================================================
119 aSession.startOperation()
120 aBaseObjectsList.append(aWire2.lastResult(), None)
121 aSession.finishOperation()
122 assert(len(aFillingFeature.results()) > 0)
124 # =============================================================================
125 # Test 3. Change parameters one-by-one and check validity of result
126 # =============================================================================
127 aSession.startOperation()
128 aFillingFeature.string("advanced_options").setValue("true")
129 aSession.finishOperation()
130 orientations = ["auto_correct", "curve_info", "edge_orient"]
131 tolerances = [0.0001, 0.001]
132 for ori in orientations:
133 for minDeg in range(2, 4):
134 for maxDeg in range(5, 7):
135 for nbIter in range(0, 3, 2):
136 for tol2d in tolerances:
137 for tol3d in tolerances:
138 for approx in [False, True]:
139 aSession.startOperation()
140 aFillingFeature.string("orientation").setValue(ori)
141 aFillingFeature.integer("min_degree").setValue(minDeg)
142 aFillingFeature.integer("max_degree").setValue(maxDeg)
143 aFillingFeature.integer("nb_iter").setValue(nbIter)
144 aFillingFeature.real("tol_2d").setValue(tol2d)
145 aFillingFeature.real("tol_3d").setValue(tol3d)
146 aFillingFeature.boolean("approximation").setValue(approx)
147 aSession.finishOperation()
148 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)
150 from salome.shaper import model
151 assert(model.checkPythonDump())