1 # Copyright (C) 2014-2020 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 email : webmaster.salome@opencascade.com
22 Unit test of ExchangePlugin_TestImport class
24 #=========================================================================
25 # Initialization of the test
26 #=========================================================================
27 from ModelAPI import *
28 from GeomAlgoAPI import *
33 from tempfile import TemporaryDirectory
35 __updated__ = "2015-05-22"
37 aSession = ModelAPI_Session.get()
39 #=========================================================================
40 # Common test function
41 #=========================================================================
42 def getShapePath(path):
43 shapes_dir = os.path.join(os.getenv("DATA_DIR"), "Shapes")
44 return os.path.join(shapes_dir, path)
46 def testImport(theType, theFile, theVolume, theDelta, theErrorExpected = False):
47 # Create a part for import
48 aSession.startOperation("Create part for import")
49 aPartFeature = aSession.moduleDocument().addFeature("Part")
50 aSession.finishOperation()
51 aPart = aSession.activeDocument()
53 aSession.startOperation("Import file")
54 aFeatureKind = "Import"
55 anImportFeature = aPart.addFeature(aFeatureKind)
56 assert anImportFeature, "{0}: Can not create a feature {1}".format(theType, aFeatureKind)
57 if theType == "STP" or theType == "STEP":
58 aFieldName = "step_file_path"
59 file = anImportFeature.string(aFieldName)
60 assert file, "{0}: Can not receive string field {1}".format(theType, aFieldName)
61 file.setValue(theFile)
62 aFieldName = "step_scale_inter_units"
63 units = anImportFeature.boolean(aFieldName)
64 assert units, "{0}: Can not receive string field {1}".format(theType, aFieldName)
66 aFieldName = "file_path"
67 file = anImportFeature.string(aFieldName)
68 assert file, "{0}: Can not receive string field {1}".format(theType, aFieldName)
69 file.setValue(theFile)
70 aFieldName = "ImportType"
71 type = anImportFeature.string(aFieldName)
72 assert type, "{0}: Can not receive string field {1}".format(theType, aFieldName)
73 type.setValue(theType)
74 aSession.finishOperation()
77 assert anImportFeature.error() != ''
80 assert anImportFeature.error() == '', "{0}: The error after execution: {1}".format(theType, anImportFeature.error())
81 assert len(anImportFeature.results()) == 1, "{0}: Wrong number of results: expected = 1, real = {1}".format(theType, len(anImportFeature.results()))
82 aResultBody = modelAPI_ResultBody(anImportFeature.firstResult())
83 assert aResultBody, "{0}: The result is not a body".format(theType)
84 aShape = aResultBody.shape()
85 assert aShape, "{0}: The body does not have a shape".format(theType)
88 aRefVolume = theVolume
89 aResVolume = GeomAlgoAPI_ShapeTools.volume(aShape)
90 assert (math.fabs(aResVolume - aRefVolume) < theDelta), "{0}: The volume is wrong: expected = {1}, real = {2}".format(theType, aRefVolume, aResVolume)
93 # Create a part for import
94 aSession.startOperation("Create part for import")
95 aPartFeature = aSession.moduleDocument().addFeature("Part")
96 aSession.finishOperation()
97 aPart = aSession.activeDocument()
99 aSession.startOperation("Import XAO")
100 anImportFeature = aPart.addFeature("Import")
101 anImportFeature.string("file_path").setValue(getShapePath("Xao/box1.xao"))
102 aFieldName = "ImportType"
103 type = anImportFeature.string(aFieldName)
105 aSession.finishOperation()
108 assert anImportFeature.error() == ''
109 assert anImportFeature.name() == "mygeom"
110 assert len(anImportFeature.results()) == 1
111 assert modelAPI_ResultBody(anImportFeature.firstResult())
112 assert anImportFeature.firstResult().data().name() == "mygeom_1"
113 aCompositeFeature = featureToCompositeFeature(anImportFeature)
114 # Two groups and one field
115 assert aCompositeFeature.numberOfSubs(False) == 3
117 aFeature1 = aCompositeFeature.subFeature(0, False)
118 assert aFeature1.getKind() == "Group"
119 assert aFeature1.name() == "boite_1"
121 aSelectionList = aFeature1.selectionList("group_list")
122 assert aSelectionList.selectionType() == "solid"
123 assert aSelectionList.size() == 1
124 assert aSelectionList.value(0).namingName("") == "mygeom_1"
126 aFeature2 = aCompositeFeature.subFeature(1, False)
127 assert aFeature2.getKind() == "Group"
128 assert aFeature2.name() == "Group_2"
130 aSelectionList = aFeature2.selectionList("group_list")
131 assert aSelectionList.selectionType() == "face"
132 assert aSelectionList.size() == 2
133 assert aSelectionList.value(0).namingName("") == "mygeom_1/Shape_1"
134 assert aSelectionList.value(1).namingName("") == "mygeom_1/Shape_2"
136 aFeature3 = aCompositeFeature.subFeature(2, False)
137 assert aFeature3.getKind() == "Field"
138 assert aFeature3.name() == "color"
139 assert aFeature3.intArray("stamps").size() == 2
140 assert aFeature3.tables("values").rows() == 2
141 assert aFeature3.tables("values").columns() == 3
142 assert aFeature3.tables("values").tables() == 2
143 assert aFeature3.tables("values").type() == 1 # integer
144 assert aFeature3.selectionList("selected").size() == 1
146 if __name__ == '__main__':
147 with TemporaryDirectory() as tmp_dir:
148 #=========================================================================
149 # Create a shape imported from BREP
150 #=========================================================================
151 shape_path = getShapePath("Brep/solid.brep")
152 testImport("BREP", shape_path, 259982.297176, 10 ** -5)
153 shape_path = shutil.copyfile(shape_path, os.path.join(tmp_dir, "solid.brp"))
154 testImport("BRP", shape_path, 259982.297176, 10 ** -5)
155 #=========================================================================
156 # Create a shape imported from STEP
157 #=========================================================================
158 shape_path = getShapePath("Step/screw.step")
159 testImport("STEP", shape_path, 3.78827401738e-06, 10 ** -17)
160 shape_path = shutil.copyfile(shape_path, os.path.join(tmp_dir, "screw.stp"))
161 testImport("STEP", shape_path, 3.78827401738e-06, 10 ** -17)
162 #=========================================================================
163 # Create a shape imported from IGES
164 #=========================================================================
165 shape_path = getShapePath("Iges/bearing.igs")
166 testImport("IGS", shape_path, 1.3407098545036494e-08, 10 ** -25)
167 shape_path = shutil.copyfile(shape_path, os.path.join(tmp_dir, "bearing.iges"))
168 testImport("IGES", shape_path, 1.3407098545036494e-08, 10 ** -25)
170 #=========================================================================
171 # Create a shape imported from XAO
172 #=========================================================================
175 #=========================================================================
177 #=========================================================================
179 from salome.shaper import model
180 assert(model.checkPythonDump())
182 #=========================================================================
183 # Check import errors
184 #=========================================================================
185 testImport("BREP", "", 0, 10 ** -25, True)
186 shape_path = getShapePath("Brep/solid.dwg")
187 testImport("BREP", shape_path, 0, 10 ** -25, True)
188 shape_path = getShapePath("Xao/wrong_file.xao")
189 testImport("XAO", shape_path, 0, 10 ** -25, True)