Salome HOME
a53e8ccc9354f87a1e9f002e5e0ecd2ac57b447c
[modules/geom.git] / src / GEOM_SWIG / GEOM_TestAll.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2023  CEA/DEN, EDF R&D, OPEN CASCADE
3 #
4 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
5 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 #
7 # This library is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU Lesser General Public
9 # License as published by the Free Software Foundation; either
10 # version 2.1 of the License, or (at your option) any later version.
11 #
12 # This library is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 # Lesser General Public License for more details.
16 #
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this library; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
20 #
21 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 #
23
24 #  GEOM GEOM_SWIG : binding of C++ implementation with Python
25 #  File   : GEOM_usinggeom.py
26 #  Author : Damien COQUERET, Open CASCADE
27 #  Module : GEOM
28
29 # ! Please, if you edit this example file, update also
30 # ! GEOM_SRC/doc/salome/gui/GEOM/input/tui_test_all.doc
31 # ! as some sequences of symbols from this example are used during
32 # ! documentation generation to identify certain places of this file
33
34 def TestAll (geompy, math):
35   import GEOM
36   
37   #Create base Variables
38   nbtimes1  = 5      #Short
39   nbtimes2  = 5
40   mindeg = 2
41   maxdeg = 5
42   nbiter = 5
43   WantPlanarFace = 1 #True
44
45   radius  = 10.  #Double
46   radius1 = 100.
47   radius2 = 200.
48   height  = 200.
49   d1      = 10.
50   d2      = 10.
51   step1   = 250.
52   step2   = 250.
53   angle   = 45.
54   angle1  = angle * math.pi / 180
55   angle2  = 2 * angle1
56   factor  = 2.
57   tol3d   = 0.0001
58   tol2d   = 0.0001
59   weight  = 1000000.
60   waterdensity = 1.
61   meshingdeflection = 0.01
62   trimsize  = 1000.
63   precision = 0.00001
64
65   #Create base points
66   p0   = geompy.MakeVertex(0.  , 0.  , 0.  ) #(3 Doubles)->GEOM_Object
67   px   = geompy.MakeVertex(100., 0.  , 0.  )
68   py   = geompy.MakeVertex(0.  , 100., 0.  )
69   pz   = geompy.MakeVertex(0.  , 0.  , 100.)
70   pxyz = geompy.MakeVertex(100., 100., 100.)
71
72   p200 = geompy.MakeVertexWithRef(pxyz, 100., 100., 100.) #(GEOM_Object, 3 Doubles)->GEOM_Object
73
74   #Create base directions
75   vx   = geompy.MakeVector(p0, px) #(GEOM_Object, GEOM_Object)->GEOM_Object
76   vy   = geompy.MakeVector(p0, py)
77   vz   = geompy.MakeVector(p0, pz)
78   vxy  = geompy.MakeVector(px, py)
79
80   vxyz = geompy.MakeVectorDXDYDZ(100., 100., 100.) #(3 Doubles)->GEOM_Object
81
82   #Create local coordinate systems
83   cs1 = geompy.MakeMarker(50,50,50, 1,0,0, 0,1,0) #(9 Doubles)->GEOM_Object
84   cs2 = geompy.MakeMarker(70,80,10, 1,0,1, 1,1,0) #(9 Doubles)->GEOM_Object
85   cs3 = geompy.MakeMarkerPntTwoVec(pz, vxy, vz)   #(3 GEOM_Object)->GEOM_Object
86
87   #Create base geometry 2D
88   Line   = geompy.MakeLineTwoPnt(p0, pxyz)                  #(2 GEOM_Object)->GEOM_Object
89   Line1  = geompy.MakeLine(pz, vxy)                         #(2 GEOM_Object)->GEOM_Object
90   Line2  = geompy.MakeLineTwoPnt(pxyz, pz)                  #(2 GEOM_Object)->GEOM_Object
91   Plane  = geompy.MakePlane(pz, vxyz, trimsize)             #(2 GEOM_Object, Double)->GEOM_Object
92   Plane1 = geompy.MakePlaneThreePnt(px, pz, p200, trimsize) #(4 Doubles)->GEOM_Object
93   Plane2 = geompy.MakePlane2Vec(vx, vz, trimsize)           #(2 GEOM_Object, Double)->GEOM_Object
94   Plane3 = geompy.MakePlaneLCS(cs1, trimsize, 3)            #(1 GEOM_Object, 2 Double)->GEOM_Object
95
96   Arc      = geompy.MakeArc(py, pz, px)                   #(3 GEOM_Object)->GEOM_Object
97   Arc2     = geompy.MakeArcCenter(py, pz, px,0)           #(3 GEOM_Object,Boolean)->GEOM_Object
98   Arc3     = geompy.MakeArcOfEllipse(p0, px, pz)          #(3 GEOM_Object,Boolean)->GEOM_Object
99   Circle   = geompy.MakeCircle(p0, vz, radius1)           #(2 GEOM_Object, Double)->GEOM_Object
100   Circle1  = geompy.MakeCircleThreePnt(p0, pxyz, px)      #(3 GEOM_Object)->GEOM_Object
101   Circle2  = geompy.MakeCircleCenter2Pnt(p0, pxyz, py)    #(3 GEOM_Object)->GEOM_Object
102   Ellipse  = geompy.MakeEllipse(p0, vy, radius2, radius1) #(2 GEOM_Object, 2 Doubles)->GEOM_Object
103   Polyline = geompy.MakePolyline([p0, pz, py, p200])      #(List of GEOM_Object)->GEOM_Object
104   Bezier   = geompy.MakeBezier([p0, pz, p200, px])        #(List of GEOM_Object)->GEOM_Object
105   Interpol = geompy.MakeInterpol([px, py, p200, pxyz], True) #(List of GEOM_Object,Boolean)->GEOM_Object
106   InterpT1 = geompy.MakeInterpolWithTangents([px, py, pxyz], vx, vz) #(List of GO, GO, GO)->GEOM_Object
107   InterpT2 = geompy.MakeInterpolWithTangents([px, py, pxyz], vxy, vxyz) #(List of GO, GO, GO)->GEOM_Object
108   Sketcher = geompy.MakeSketcher("Sketcher:F -100 -100:TT 250 -100:R 0:C 100 150:R 0:L 300:WW",
109                                  [100,0,0, 1,1,1, -1,1,0]) #(String, List of Doubles)->GEOM_Object
110
111   #Create 3D wires with 3D Sketcher
112   sk = geompy.Sketcher3D()
113   sk.addPointsAbsolute(0,0,0, 70,0,0)
114   sk.addPointsRelative(0, 0, 130)
115   sk.addPointRadiusAnglesRelative(100, 50, 0,"OXY")
116   sk.addPointRadiusAnglesRelative(130, 30, 80, "OXZ")
117   sk.addPointRadiusAnglesAbsolute(500, 60, 30,"OXY")
118   sk.addPointRadiusAngleHRelative(100, 50, 0,"OXY")
119   sk.addPointRadiusAngleHRelative(130, 30, 40, "OXZ")
120   sk.addPointRadiusAngleHAbsolute(800, 60, 30,"OXY")
121   sk.close()
122   Sketcher3d_1 = sk.wire()
123
124   Sketcher3d_2 = geompy.Make3DSketcher([0,0,0, 50,50,50, 0,50,50, 10,0,0])
125
126   #Create local coordinate system from shape
127   cs4 = geompy.MakeMarkerFromShape(Plane)
128
129   #Test point on curve creation
130   p_on_arc = geompy.MakeVertexOnCurve(Arc, 0.25) #(GEOM_Object, Double)->GEOM_Object
131   p_on_arc2 = geompy.MakeVertexOnCurveByCoord(Arc, 100, -10, 10 ) #(GEOM_Object, Double)->GEOM_Object
132   p_on_arc3 = geompy.MakeVertexOnCurveByLength(Arc, 50, py) #(GEOM_Object, Double, GEOM_Object)->GEOM_Object
133
134   #Test point on lines intersection
135   p_on_l1l2 = geompy.MakeVertexOnLinesIntersection(Line1, Line2) #(2 GEOM_Object)->GEOM_Object
136
137   #Test tangent on curve creation
138   tan_on_arc = geompy.MakeTangentOnCurve(Arc, 0.7) #(GEOM_Object, Double)->GEOM_Object
139   
140   #Test tangent on face creation
141   tan_vertex_1 = geompy.MakeVertex(0, 0, 0)
142   tan_vertex_2 = geompy.MakeVertex(0, 90, 30)
143   tan_vertex_3 = geompy.MakeVertex(100, 90, 0)
144   tan_vertex_4 = geompy.MakeVertex(-100, 90, 0)
145   tan_curve = geompy.MakeInterpol([tan_vertex_4, tan_vertex_2, tan_vertex_3, tan_vertex_1], False)
146   tan_extrusion = geompy.MakePrismDXDYDZ(tan_curve, 0, 30, -60)
147   tan_on_face = geompy.MakeTangentPlaneOnFace(tan_extrusion, 0.7, 0.5, 150)
148
149   #Create base geometry 3D
150   Box      = geompy.MakeBoxTwoPnt(p0, p200)                             #(2 GEOM_Object)->GEOM_Object
151   Box1     = geompy.MakeBoxDXDYDZ(10, 20, 30)                           #(3 Doubles)->GEOM_Object
152   Box2     = geompy.MakeBox(10,20,30, 15,25,35)                         #(6 Doubles)->GEOM_Object
153   Cylinder = geompy.MakeCylinder(p0, vz, radius1, height)               #(2 GEOM_Object, 2 Doubles)->GEOM_Object
154   Cyl1     = geompy.MakeCylinderRH(radius2, height)                     #(2 Doubles)->GEOM_Object
155   Cylinder1= geompy.MakeCylinderA(p0, vz, radius1, height, angle1)      #(2 GEOM_Object, 3 Doubles)->GEOM_Object
156   Cyl2     = geompy.MakeCylinderRHA(radius2, height, angle2)            #(3 Doubles)->GEOM_Object
157   Sphere   = geompy.MakeSpherePntR(p0, radius1)                         #(GEOM_Object, Double)->GEOM_Object
158   Sphere1  = geompy.MakeSphereR(radius)                                 #(Double)->GEOM_Object
159   Sphere2  = geompy.MakeSphere(50, 70, 30, radius)                      #(4 Doubles)->GEOM_Object
160   Cone     = geompy.MakeCone(p0, vz, radius2, radius, height)           #(2 GEOM_Object, 3 Doubles)->GEOM_Object
161   Cone1    = geompy.MakeConeR1R2H(radius1, radius, height)              #(3 Doubles)->GEOM_Object
162   Torus    = geompy.MakeTorus(p0, vz, radius2, radius)                  #(2 GEOM_Object, 2 Doubles)->GEOM_Object
163   Torus1   = geompy.MakeTorusRR(radius2, radius1)                       #(2 Doubles)->GEOM_Object
164
165   #Boolean (Common, Cut, Fuse, Section)
166   Common  = geompy.MakeBoolean(Box, Sphere, 1) #(2 GEOM_Object, Short)->GEOM_Object
167   Cut     = geompy.MakeBoolean(Box, Sphere, 2)
168   Fuse    = geompy.MakeBoolean(Box, Sphere, 3)
169   Section = geompy.MakeBoolean(Box, Sphere, 4)
170
171   #Create base objects
172   Edge     = geompy.MakeEdge(p0, pxyz)               #(2 GEOM_Object)->GEOM_Object
173   Edge1    = geompy.MakeEdgeOnCurveByLength(Arc, 50, px) #(GEOM_Object, Double, GEOM_Object)->GEOM_Object
174   Wire     = geompy.MakeWire([vxy, Arc])             #(List Of GEOM_Object)->GEOM_Object
175   Face     = geompy.MakeFace(Wire, WantPlanarFace)   #(GEOM_Object, Boolean)->GEOM_Object
176   Face1    = geompy.MakeFaceWires([Wire, Sketcher],
177                                   WantPlanarFace)    #(List of GEOM_Object, Boolean)->GEOM_Object
178   Face2    = geompy.MakeFace(Sketcher, WantPlanarFace)
179   Face3    = geompy.MakeFaceHW (100., 200., 1)       #(2 Doubles, 1 Int)->GEOM_Object
180   Face4    = geompy.MakeFaceObjHW (vz, 200., 100.)   #(1 GEOM_Object, 2 Doubles)->GEOM_Object
181   Face5    = geompy.MakeFaceFromSurface(Face, Sketcher) #(2 GEOM_Objects)->GEOM_Object
182   
183   Cut2 = geompy.MakeCutList(Sphere1, [Box1], True)
184   #(List of GEOM_Object)->GEOM_Object
185   Face6 = geompy.MakeFaceWithConstraints([geompy.GetSubShape(Cut2, [5]),  geompy.GetSubShape(Cut2, [3]), 
186                                           geompy.GetSubShape(Cut2, [11]), geompy.GetSubShape(Cut2, [3]),
187                                           geompy.GetSubShape(Cut2, [13]), geompy.GetSubShape(Cut2, [3])])
188   Disk     = geompy.MakeDiskPntVecR (p0, vz, radius) #(2 GEOM_Object, 1 Double)->GEOM_Object
189   Disk2    = geompy.MakeDiskThreePnt(p0, p200, pz)   #(3 GEOM_Object)->GEOM_Object
190   Disk3    = geompy.MakeDiskR(100., 1)               #(1 Doubles, 1 Int)->GEOM_Object
191   Shell    = geompy.MakeShell([Face, Face1])         #(List of GEOM_Object)->GEOM_Object
192
193   Prism1   = geompy.MakePrism(Face2, p0, pxyz)       #(3 GEOM_Object)->GEOM_Object
194   prism1_faces = geompy.SubShapeAllSortedCentres(Prism1, geompy.ShapeType["FACE"])
195   Shell1   = geompy.MakeShell([prism1_faces[0], prism1_faces[1],
196                                prism1_faces[3], prism1_faces[4],
197                                prism1_faces[5], prism1_faces[2]])
198   Solid    = geompy.MakeSolid([Shell1])              #(List of GEOM_Object)->GEOM_Object
199   
200   Box1_translation = geompy.MakeTranslation(Box1, 10, 0, 0)
201   Box1_shell = geompy.SubShapeAllSorted(Box1, geompy.ShapeType["SHELL"])[0]
202   Box1_translation_shell = geompy.SubShapeAllSorted(Box1_translation, geompy.ShapeType["SHELL"])[0]
203   
204   Solid_from_shells = geompy.MakeSolidFromConnectedFaces([Box1_shell, Box1_translation_shell], 1) #(List of GEOM_Object, Boolean)->GEOM_Object
205   
206   # Create Isoline
207   Isoline = geompy.MakeIsoline(Face1, True, 0.5)     #(1 GEOM_Object, Boolean, Double)->GEOM_Object
208
209   ShapeListCompound = []
210   i = 0
211   while i <= 3 :
212         S = geompy.MakeTranslation(Arc, i * 100., i * 100., i * 100.)
213         ShapeListCompound.append(S)
214         i = i + 1
215   Compound = geompy.MakeCompound(ShapeListCompound)  #(List of GEOM_Object)->GEOM_Object
216
217   #Test point on surface creation
218   p_on_face = geompy.MakeVertexOnSurface(Face, 0.1, 0.8) #(GEOM_Object, Double, Double)->GEOM_Object
219   p_on_face2 = geompy.MakeVertexOnSurfaceByCoord(Face, 0., 0., 0.) #(GEOM_Object, Double, Double, Double)->GEOM_Object
220   p_on_face3 = geompy.MakeVertexInsideFace(Face) #(GEOM_Object)->GEOM_Object
221
222   # Test plane from existing face creation
223   Plane2 = geompy.MakePlaneFace(Face, trimsize)      #(GEOM_Object, Double)->GEOM_Object
224
225   #ShapeList for Sewing
226   S = geompy.MakeRotation(Face, vxy, angle1)
227
228   #Test Line on Faces Intersection
229   Line3 = geompy.MakeLineTwoFaces(prism1_faces[0], prism1_faces[1]) #(2 GEOM_Object)->GEOM_Object
230
231   #Create advanced objects
232   Prism            = geompy.MakePrismVecH(Face, vz, 100.0)     #(2 GEOM_Object, Double)->GEOM_Object
233   Prism2Ways       = geompy.MakePrismVecH2Ways(Face, vz, 10.0) #(2 GEOM_Object, Double)->GEOM_Object
234   PrismTwoPnt      = geompy.MakePrism(Face2, p0, pxyz)         #(3 GEOM_Object)->GEOM_Object
235   PrismTwoPnt2Ways = geompy.MakePrism2Ways(Face2, p0, pxyz)    #(3 GEOM_Object)->GEOM_Object
236   PrismDXDYDZ      = geompy.MakePrismDXDYDZ(Face2, 10, 20, 100)#(2 GEOM_Object, Double)->GEOM_Object
237   PrismDXDYDZ2Ways = geompy.MakePrismDXDYDZ2Ways(Face, 30, -20, 200)#(2 GEOM_Object, Double)->GEOM_Object
238   Revolution       = geompy.MakeRevolution(Face, vxy, angle2)      #(2 GEOM_Object, Double)->GEOM_Object
239   Revolution2Ways  = geompy.MakeRevolution2Ways(Face, vxy, angle1) #(2 GEOM_Object, Double)->GEOM_Object
240   Filling          = geompy.MakeFilling(Compound, mindeg, maxdeg,
241                                         tol2d, tol3d, nbiter)  #(GEOM_Object, 4 Doubles, Short)->GEOM_Object
242   Pipe             = geompy.MakePipe(Wire, Edge)               #(2 GEOM_Object)->GEOM_Object
243   Sewing           = geompy.MakeSewing([Face, S], precision)   #(List Of GEOM_Object, Double)->GEOM_Object
244   ThickSolid       = geompy.MakeCopy(Box)
245   faces            = geompy.SubShapeAllSortedCentres(Box, geompy.ShapeType["FACE"])
246   shell            = geompy.MakeShell([faces[0], faces[1], faces[2]])
247   faceIDs          = geompy.SubShapeAllSortedCentresIDs(ThickSolid, geompy.ShapeType["FACE"])
248   ThickShell       = geompy.MakeThickSolid(shell, 50)          #(GEOM_Object, Double)->GEOM_Object
249   geompy.Thicken(ThickSolid, 50, [faceIDs[0], faceIDs[1]])     #(GEOM_Object) modification
250   Copy             = geompy.MakeCopy(Box)                      #(GEOM_Object)->GEOM_Object
251
252   #Transform objects
253   Translation = geompy.MakeTranslationTwoPoints(Box, px, pz)    #(3 GEOM_Object)->GEOM_Object
254   TranslVect  = geompy.MakeTranslationVector(Box, vxyz)         #(2 GEOM_Object)->GEOM_Object
255   TranslVectD = geompy.MakeTranslationVectorDistance(Box, vxyz, 50.0)   #(2 GEOM_Object)->GEOM_Object  
256   Rotation    = geompy.MakeRotation(Box, vz, angle1)            #(2 GEOM_Object, Double)->GEOM_Object
257   RotatPnt    = geompy.MakeRotationThreePoints(Box, px, py, pz) #(4 GEOM_Object)->GEOM_Object
258
259   #Scale by factor relatively given point
260   Scale1 = geompy.MakeScaleTransform(Box, pxyz, factor)      #(2 GEOM_Object, Double)->GEOM_Object
261   #Scale by factor relatively the origin of global CS
262   Scale2 = geompy.MakeScaleTransform(Box, None, factor)      #
263   #Scale along axes of global CS by different factors. Scale relatively given point
264   Scale3 = geompy.MakeScaleAlongAxes(Box, pxyz, 1.5, 0.5, 3) #(2 GEOM_Object, 3 Doubles)->GEOM_Object
265   #Scale along axes of global CS by different factors. Scale relatively the origin of global CS
266   Scale4 = geompy.MakeScaleAlongAxes(Box, None, 1.5, 0.5, 3) #
267
268   Mirror      = geompy.MakeMirrorByPlane(Box, Plane) #(2 GEOM_Object)->GEOM_Object
269   MirrorAxis  = geompy.MakeMirrorByAxis(Box, Line1)  #
270   MirrorPnt   = geompy.MakeMirrorByPoint(Box, p200)  #
271   Position    = geompy.MakePosition(Box, cs1, cs2)   #(3 GEOM_Object)->GEOM_Object
272   Position2   = geompy.PositionAlongPath(Box, Arc, 0.5, 1, 0)  #(2 GEOM_Object, 1 Double, 2 Bool)->GEOM_Object
273   Offset      = geompy.MakeOffset(Box, 10.)          #(GEOM_Object, Double)->GEOM_Object
274   ProjOnWire  = geompy.MakeProjectionOnWire(p0, Wire)
275   ProjOnCyl   = geompy.MakeProjectionOnCylinder(Wire, 100)
276   Orientation = geompy.ChangeOrientation(Box)
277   ExtEdge     = geompy.ExtendEdge(Edge1, -0.3, 1.3)
278   ExtFace     = geompy.ExtendFace(Face5, -0.3, 1.3, -0.1, 1.1)
279   Surface     = geompy.MakeSurfaceFromFace(Face5)
280
281   #IDList for Fillet/Chamfer
282   prism_edges = geompy.ExtractShapes(Prism, geompy.ShapeType["EDGE"], True)
283
284   for anEdge in prism_edges:
285     eid = geompy.GetSubShapeID(Prism, anEdge)
286     sse = geompy.GetSubShape(Prism, [eid])
287
288     sse_id = geompy.GetSubShapeID(Prism, sse)
289     if sse_id != eid:
290       print("Error: GetSubShape() or GetSubShapeID() has failed!")
291
292   IDlist_e = []
293   IDlist_e.append(geompy.GetSubShapeID(Prism, prism_edges[0]))
294   IDlist_e.append(geompy.GetSubShapeID(Prism, prism_edges[1]))
295   IDlist_e.append(geompy.GetSubShapeID(Prism, prism_edges[2]))
296
297   prism_faces = geompy.ExtractShapes(Prism, geompy.ShapeType["FACE"], True)
298
299   f_ind_1 = geompy.GetSubShapeID(Prism, prism_faces[0])
300   f_ind_2 = geompy.GetSubShapeID(Prism, prism_faces[1])
301
302   IDlist_f = [f_ind_1, f_ind_2]
303   
304   #Local operations
305   Fillet2d = geompy.MakeFillet2D(Face3, radius, [4, 7, 9]) #(GEOM_Object, Double, ListOfLong)->GEOM_Object
306   Fillet   = geompy.MakeFillet (Prism, radius, geompy.ShapeType["EDGE"],
307                                 IDlist_e) #(GEOM_Object, Double, Short, ListOfLong)->GEOM_Object
308   Fillet2  = geompy.MakeFilletR1R2 (Prism, 7., 13., geompy.ShapeType["EDGE"],
309                                     IDlist_e) #(GEOM_Object, Double, Double, Short, ListOfLong)->GEOM_Object
310   Chamfer  = geompy.MakeChamferEdge(Prism, d1, d2,
311                                     f_ind_1, f_ind_2) #(GEOM_Object, 2 Doubles, 2 Long)->GEOM_Object
312   Chamfer2 = geompy.MakeChamferFaces(Prism, d1, d2,
313                                      IDlist_f) #(GEOM_Object, 2 Doubles, ListOfLong)->GEOM_Object
314   Chamfer3 = geompy.MakeChamferEdges(Prism, d1, d2,
315                                      IDlist_e) #(GEOM_Object, 2 Doubles, ListOfLong)->GEOM_Object
316   Chamfer4 = geompy.MakeChamferFacesAD(Prism, d1, 20. * math.pi / 180.,
317                                        IDlist_f) #(GEOM_Object, 2 Doubles, ListOfLong)->GEOM_Object
318   #End of Local operations
319
320   #Create Patterns
321   MultiTrans1D = geompy.MakeMultiTranslation1D(Fillet, vz, step1, nbtimes1)
322   MultiTrans2D = geompy.MakeMultiTranslation2D(Fillet, vz, step1, nbtimes1, vy, step2, nbtimes2)
323   MultiRot1Dt  = geompy.MultiRotate1DNbTimes(Chamfer, vx, nbtimes1)
324   MultiRot1Ds  = geompy.MultiRotate1DByStep(Chamfer, vx, math.pi/4., nbtimes1)
325   MultiRot2Dt  = geompy.MultiRotate2DNbTimes(Chamfer, vx, nbtimes1, step1, nbtimes2)
326   MultiRot2Ds  = geompy.MultiRotate2DByStep(Chamfer, vx, angle1, nbtimes1, step1, nbtimes2)
327
328   #Create Information objects
329   CDG        = geompy.MakeCDG(Prism)               #(GEOM_Object)->GEOM_Object
330   Archimede  = geompy.Archimede(Box, weight, waterdensity,
331                                 meshingdeflection) #(GEOM_Object, 3 Doubles)->GEOM_Object
332   mindist = geompy.MinDistanceComponents(TranslVect, Mirror) #(2 GEOM_Object)->4 Doubles
333   print("Minumal distance between TranslVect and Mirror is", mindist[0], end=' ')
334   print("by components:", mindist[1], ",", mindist[2], ",", mindist[3])
335   CheckShape = geompy.CheckShape(Prism)            #(GEOM_Object)->Boolean
336   print("CheckShape(Prism) = ", CheckShape)
337
338   #Partition objects
339   Partition  = geompy.MakePartition([Box], [Plane]) #(2 Lists Of GEOM_Object)->GEOM_Object
340   Partition1 = geompy.MakeHalfPartition(Box, Plane) #(2 GEOM_Object)->GEOM_Object
341
342   #Add In Study
343   id_p0   = geompy.addToStudy(p0,   "Vertex 0")
344   id_px   = geompy.addToStudy(px,   "Vertex X")
345   id_py   = geompy.addToStudy(py,   "Vertex Y")
346   id_pz   = geompy.addToStudy(pz,   "Vertex Z")
347   id_pxyz = geompy.addToStudy(pxyz, "Vertex XYZ")
348   id_p200 = geompy.addToStudy(p200, "Vertex 200")
349
350   id_vx   = geompy.addToStudy(vx,   "Vector X")
351   id_vy   = geompy.addToStudy(vy,   "Vector Y")
352   id_vz   = geompy.addToStudy(vz,   "Vector Z")
353   id_vxy  = geompy.addToStudy(vxy,  "Vector XY")
354   id_vxyz = geompy.addToStudy(vxyz, "Vector XYZ")
355
356   id_cs1 = geompy.addToStudy(cs1, "CS 50,50,50, 1,0,0, 0,1,0")
357   id_cs2 = geompy.addToStudy(cs2, "CS 70,80,10, 1,0,1, 1,1,0")
358   id_cs3 = geompy.addToStudy(cs3, "CS: pz, vxy, vz")
359   id_cs4 = geompy.addToStudy(cs4, "CS: Plane")
360
361   id_Line   = geompy.addToStudy(Line,   "Line")
362   id_Line1  = geompy.addToStudy(Line1,  "Line by point and vector")
363   id_Line3  = geompy.addToStudy(Line3,  "Line on Two Faces Intersection")
364   id_Plane  = geompy.addToStudy(Plane,  "Plane")
365   id_Plane1 = geompy.addToStudy(Plane1,  "Plane by 3 points")
366   id_Plane2 = geompy.addToStudy(Plane2,  "Plane by 2 vectors")
367   id_Plane3 = geompy.addToStudy(Plane3,  "Plane by LCS")
368
369   id_Arc      = geompy.addToStudy(Arc,      "Arc")
370   id_Arc2     = geompy.addToStudy(Arc2,     "Arc2")
371   id_Arc3     = geompy.addToStudy(Arc3,     "Arc3")
372   id_Circle   = geompy.addToStudy(Circle,   "Circle")
373   id_Circle1  = geompy.addToStudy(Circle1,  "Circle by 3 points")
374   id_Circle2  = geompy.addToStudy(Circle2,  "Circle by center and 2 points")
375   id_Ellipse  = geompy.addToStudy(Ellipse,  "Ellipse")
376   id_Polyline = geompy.addToStudy(Polyline, "Polyline")
377   id_Bezier   = geompy.addToStudy(Bezier,   "Bezier")
378   id_Interpol = geompy.addToStudy(Interpol, "Interpol")
379   id_InterpT1 = geompy.addToStudy(InterpT1, "InterpT1")
380   id_InterpT2 = geompy.addToStudy(InterpT2, "InterpT2")
381   id_Sketcher = geompy.addToStudy(Sketcher, "Sketcher")
382
383   id_Sketcher3d_1 = geompy.addToStudy(Sketcher3d_1, "Sketcher 3D by interface")
384   id_Sketcher3d_2 = geompy.addToStudy(Sketcher3d_2, "Sketcher 3D by list")
385
386   id_p_on_arc  = geompy.addToStudy(p_on_arc,  "Vertex on Arc (0.25)")
387   id_p_on_arc2 = geompy.addToStudy(p_on_arc2, "Vertex on Arc at(100, -10, 10)" )
388   id_p_on_arc3 = geompy.addToStudy(p_on_arc3, "Vertex on Arc length 50 from Vertex X" )
389   
390   id_p_on_l1l2 = geompy.addToStudy(p_on_l1l2, "Vertex on Lines Intersection")
391
392   id_tan_on_arc  = geompy.addToStudy(tan_on_arc, "Tangent on Arc (0.7)")
393   id_tan_on_face = geompy.addToStudy(tan_on_face, "Tangent on Face")
394
395   id_Box      = geompy.addToStudy(Box,      "Box")
396   id_Box1     = geompy.addToStudy(Box1,     "Box 10x20x30")
397   id_Box2     = geompy.addToStudy(Box2,     "Box (10,20,30)-(15,25,35)")
398   id_Cylinder = geompy.addToStudy(Cylinder, "Cylinder")
399   id_Cyl1     = geompy.addToStudy(Cyl1,     "Cylinder RH")
400   id_Cylinder1= geompy.addToStudy(Cylinder1,"CylinderA")
401   id_Cyl2     = geompy.addToStudy(Cyl2,     "Cylinder RHA")
402   id_Sphere   = geompy.addToStudy(Sphere,   "Sphere Pnt R")
403   id_Sphere1  = geompy.addToStudy(Sphere1,  "Sphere R")
404   id_Sphere2  = geompy.addToStudy(Sphere2,  "Sphere")
405   id_Cone     = geompy.addToStudy(Cone,     "Cone")
406   id_Cone1    = geompy.addToStudy(Cone1,    "Cone R1R2H")
407   id_Torus    = geompy.addToStudy(Torus,    "Torus")
408   id_Torus1   = geompy.addToStudy(Torus1,   "Torus RR")
409
410   id_Common  = geompy.addToStudy(Common,  "Common")
411   id_Cut     = geompy.addToStudy(Cut,     "Cut")
412   id_Cut2    = geompy.addToStudy(Cut2,    "Cut2")
413   id_Fuse    = geompy.addToStudy(Fuse,    "Fuse")
414   id_Section = geompy.addToStudy(Section, "Section")
415
416   id_Edge     = geompy.addToStudy(Edge,     "Edge")
417   id_Edge1    = geompy.addToStudy(Edge1,    "Edge on Arc length 50 from Vertex Y")
418   id_Wire     = geompy.addToStudy(Wire,     "Wire")
419   id_Face     = geompy.addToStudy(Face,     "Face")
420   id_Face1    = geompy.addToStudy(Face1,    "Face from two wires")
421   id_Face2    = geompy.addToStudy(Face2,    "Face from Sketcher")
422   id_Face3    = geompy.addToStudy(Face3,    "Face Height Width")
423   id_Face4    = geompy.addToStudy(Face4,    "Face Plane_HW")
424   id_Face5    = geompy.addToStudy(Face5,    "Face from surface and wire")
425   id_Face6    = geompy.addToStudy(Face6,    "Face from edges with constraints")
426   id_Disk     = geompy.addToStudy(Disk,     "Disk PntVecR")
427   id_Disk2    = geompy.addToStudy(Disk2,    "Disk Three Points")
428   id_Disk3    = geompy.addToStudy(Disk3,    "Disk OXY Radius")
429   id_Shell    = geompy.addToStudy(Shell,    "Shell")
430
431   id_Isoline  = geompy.addToStudy(Isoline,  "Isoline")
432
433   id_p_on_face = geompy.addToStudy(p_on_face, "Vertex on Face (0.1, 0.8)")
434   id_p_on_face2 = geompy.addToStudy(p_on_face2, "Vertex on Face at(0., 0., 0.)")
435   id_p_on_face3 = geompy.addToStudy(p_on_face3, "Vertex inside Face")
436
437   id_Prism1   = geompy.addToStudy(Prism1,     "Prism by Two Pnt")
438   id_Shell1   = geompy.addToStudy(Shell1,   "Shell from Prism1 faces")
439   id_Solid    = geompy.addToStudy(Solid,    "Solid")
440   id_Solid1   = geompy.addToStudy(Solid_from_shells,   "Solid1")
441   
442   id_Compound = geompy.addToStudy(Compound, "Compound")
443
444   id_Plane2   = geompy.addToStudy(Plane2,   "Plane on Face")
445
446   id_Copy       = geompy.addToStudy(Copy,       "Copy")
447   id_ThickShell = geompy.addToStudy(ThickShell, "ThickShell")
448   id_ThickSolid = geompy.addToStudy(ThickSolid, "ThickSolid")
449
450   id_Prism            = geompy.addToStudy(Prism,            "Prism")
451   id_Prism2Ways       = geompy.addToStudy(Prism2Ways,       "Prism2Ways")
452   id_PrismTwoPnt      = geompy.addToStudy(PrismTwoPnt,      "PrismTwoPnt")
453   id_PrismTwoPnt2Ways = geompy.addToStudy(PrismTwoPnt2Ways, "PrismTwoPnt2Ways")
454   id_PrismDXDYDZ      = geompy.addToStudy(PrismDXDYDZ,      "PrismDXDYDZ")
455   id_PrismDXDYDZ2Ways = geompy.addToStudy(PrismDXDYDZ2Ways, "PrismDXDYDZ2Ways")
456   id_Revolution       = geompy.addToStudy(Revolution,       "Revolution")
457   id_Revolution2Ways  = geompy.addToStudy(Revolution2Ways,  "Revolution2Ways")
458   id_Filling    = geompy.addToStudy(Filling,    "Filling")
459   id_Pipe       = geompy.addToStudy(Pipe,       "Pipe")
460   id_Sewing     = geompy.addToStudy(Sewing,     "Sewing")
461
462   import salome_version
463   if int(salome_version.getXVersion(), 16) >= int('0x060600', 16):
464     [Face5, Face6] = geompy.SubShapes(Box, [31, 33])
465     [b1_e1, b1_e2, b1_e3, b1_e4] = geompy.SubShapes(Box, [12, 22, 25, 29])
466     [b2_e1, b2_e2, b2_e3, b2_e4] = geompy.SubShapes(Box, [ 8, 18, 26, 30])
467     Path1 = geompy.RestorePath(Box, Face5, Face6)
468     Path2 = geompy.RestorePathEdges(Box, [b1_e1, b1_e2, b1_e3, b1_e4], [b2_e1, b2_e2, b2_e3, b2_e4])
469
470     id_Base1      = geompy.addToStudyInFather(Box, Face5, "Base1")
471     id_Base2      = geompy.addToStudyInFather(Box, Face6, "Base2")
472     id_Base1e1    = geompy.addToStudyInFather(Box, b1_e1, "Base1 Edge1")
473     id_Base1e2    = geompy.addToStudyInFather(Box, b1_e2, "Base1 Edge2")
474     id_Base1e3    = geompy.addToStudyInFather(Box, b1_e3, "Base1 Edge3")
475     id_Base1e4    = geompy.addToStudyInFather(Box, b1_e4, "Base1 Edge4")
476     id_Base2e1    = geompy.addToStudyInFather(Box, b2_e1, "Base2 Edge1")
477     id_Base2e2    = geompy.addToStudyInFather(Box, b2_e2, "Base2 Edge2")
478     id_Base2e3    = geompy.addToStudyInFather(Box, b2_e3, "Base2 Edge3")
479     id_Base2e4    = geompy.addToStudyInFather(Box, b2_e4, "Base2 Edge4")
480     id_Path1      = geompy.addToStudy(Path1,      "Path1")
481     id_Path2      = geompy.addToStudy(Path2,      "Path2")
482     pass
483
484   id_Translation = geompy.addToStudy(Translation,   "Translation")
485   id_TranslVect  = geompy.addToStudy(TranslVect ,   "Translation along vector")
486   id_TranslVectD = geompy.addToStudy(TranslVectD,   "Translation along vector with defined distance")
487   id_Rotation    = geompy.addToStudy(Rotation,      "Rotation")
488   id_RotatPnt    = geompy.addToStudy(RotatPnt,      "Rotation by three points")
489   id_Scale1      = geompy.addToStudy(Scale1,        "Scale1")
490   id_Scale2      = geompy.addToStudy(Scale2,        "Scale2")
491   id_Scale3      = geompy.addToStudy(Scale3,        "Scale3")
492   id_Scale4      = geompy.addToStudy(Scale4,        "Scale4")
493   id_Mirror      = geompy.addToStudy(Mirror,        "Mirror by Plane")
494   id_MirrorAxis  = geompy.addToStudy(MirrorAxis,    "Mirror by Axis")
495   id_MirrorPnt   = geompy.addToStudy(MirrorPnt,     "Mirror by Point")
496   id_Position    = geompy.addToStudy(Position,      "Positioned box")
497   id_Position2   = geompy.addToStudy(Position2,     "Positioned box along path")
498   id_Offset      = geompy.addToStudy(Offset,        "Offset")
499   id_Orientation = geompy.addToStudy(Orientation,   "Orientation")
500   id_ProjOnWire  = geompy.addToStudy(ProjOnWire[1], "ProjOnWire")
501   id_ProjOnCyl   = geompy.addToStudy(ProjOnCyl,     "ProjOnCyl")
502   id_ExtEdge     = geompy.addToStudy(ExtEdge,       "ExtendedEdge")
503   id_ExtFace     = geompy.addToStudy(ExtFace,       "ExtendedFace")
504   id_Surface     = geompy.addToStudy(Surface,       "Surface From Face")
505
506   id_Fillet   = geompy.addToStudy(Fillet,   "Fillet")
507   id_Fillet2  = geompy.addToStudy(Fillet2,  "Fillet2")
508   id_Fillet2d = geompy.addToStudy(Fillet2d, "Fillet2D")
509
510   id_Chamfer  = geompy.addToStudy(Chamfer,  "Chamfer on Edge")
511   id_Chamfer2 = geompy.addToStudy(Chamfer2, "Chamfer on Faces")
512   id_Chamfer3 = geompy.addToStudy(Chamfer3, "Chamfer on Edges")
513   id_Chamfer4 = geompy.addToStudy(Chamfer4, "Chamfer on Faces with params D Angle")
514
515   id_MultiTrans1D = geompy.addToStudy(MultiTrans1D, "MultiTrans1D")
516   id_MultiTrans2D = geompy.addToStudy(MultiTrans2D, "MultiTrans2D")
517   id_MultiRot1Dt  = geompy.addToStudy(MultiRot1Dt,  "MultiRot1D NbTimes")
518   id_MultiRot1Ds  = geompy.addToStudy(MultiRot1Ds,  "MultiRot1D ByStep")
519   id_MultiRot2Dt  = geompy.addToStudy(MultiRot2Dt,  "MultiRot2D NbTimes")
520   id_MultiRot2Ds  = geompy.addToStudy(MultiRot2Ds,  "MultiRot2D ByStep")
521
522   id_CDG       = geompy.addToStudy(CDG,       "CDG")
523   id_Archimede = geompy.addToStudy(Archimede, "Archimede")
524
525   id_Partition  = geompy.addToStudy(Partition, "Partition")
526   id_Partition1 = geompy.addToStudy(Partition1, "Half Partition")
527   
528   #Decompose objects
529
530   # SubShape
531   SubFace    = geompy.SubShape(Box, geompy.ShapeType["FACE"], [2])
532   name       = geompy.SubShapeName(SubFace, Box)
533   id_SubFace = geompy.addToStudyInFather(Box, SubFace, name)
534
535   # SubShapeSortedCentres
536   SubFaceS   = geompy.SubShapeSortedCentres(Box, geompy.ShapeType["FACE"], [5])
537   nameS      = geompy.SubShapeName(SubFaceS, Box)
538   id_SubFace = geompy.addToStudyInFather(Box, SubFaceS, nameS)
539
540   # GetExistingSubObjects
541   SubObjsAll = geompy.GetExistingSubObjects(Box, True)
542   print("For now, Box has the following created sub-objects:", SubObjsAll)
543
544   # GetGroups
545   SubGrpsAll = geompy.GetGroups(Box)
546   print("For now, Box has the following created groups:", SubGrpsAll)
547
548   # SubShapeAll
549   SubEdgeList = geompy.SubShapeAll(SubFace, geompy.ShapeType["EDGE"])
550   i=0
551   for SubEdge in SubEdgeList :
552     name = geompy.SubShapeName(SubEdge, SubFace)
553     id_SubEdge = geompy.addToStudyInFather(SubFace, SubEdge, name)
554
555   # SubShapeAllIDs
556   SubEdgeIDsList = geompy.SubShapeAllIDs(SubFace, geompy.ShapeType["EDGE"])
557   print("IDs of edges of SubFace:", SubEdgeIDsList, "(unsorted)")
558   group = geompy.CreateGroup(SubFace, geompy.ShapeType["EDGE"])
559   geompy.UnionIDs(group, SubEdgeIDsList)
560   geompy.addToStudyInFather(SubFace, group, "Group of all edges")
561
562   # SubShapeAllSortedCentresIDs
563   SubEdgeIDsList = geompy.SubShapeAllSortedCentresIDs(SubFace, geompy.ShapeType["EDGE"])
564   print("IDs of edges of SubFace:", SubEdgeIDsList, "(sorted)")
565
566   # GetSubShape and GetSubShapeID
567   for ind in SubEdgeIDsList:
568     edge = geompy.GetSubShape(SubFace, [ind])
569     ind_e = geompy.GetSubShapeID(SubFace, edge)
570     if ind_e != ind:
571       print("Error in GetSubShape or GetSubShapeID")
572
573   # RestoreSubShapes
574   geompy.RestoreSubShapes(Copy)
575   geompy.RestoreSubShapes(RotatPnt, [], GEOM.FSM_Transformed)
576   geompy.RestoreSubShapes(Partition, [Box])
577   geompy.RestoreSubShapes(Partition1)
578
579   # GetSubShapeEdgeSorted
580   p1 = geompy.GetFirstVertex(Sketcher)
581   p2 = geompy.GetFirstVertex(Sketcher3d_1)
582   p3 = geompy.GetFirstVertex(Sketcher3d_2)
583   geompy.GetSubShapeEdgeSorted(Sketcher, p1, "OrderedEdges")
584   geompy.GetSubShapeEdgeSorted(Sketcher3d_1, p2, "OrderedEdges")
585   geompy.GetSubShapeEdgeSorted(Sketcher3d_2, p3, "OrderedEdges")
586
587   # GetSubShapesWithTolerance
588   geompy.GetSubShapesWithTolerance(Box, GEOM.FACE, GEOM.CC_GT, 1.e-8, "gt")
589   geompy.GetSubShapesWithTolerance(Box, GEOM.FACE, GEOM.CC_GE, 1.e-7, "ge")
590   geompy.GetSubShapesWithTolerance(Box, GEOM.FACE, GEOM.CC_LT, 2.e-7, "lt")
591   geompy.GetSubShapesWithTolerance(Box, GEOM.FACE, GEOM.CC_LE, 1.e-7, "le")
592
593   # MakeExtraction
594   geompy.MakeExtraction(Box, [13], "Ext_no_face")
595   geompy.MakeExtraction(Box, [18], "Ext_no_edge")
596   geompy.MakeExtraction(Box, [16], "Ext_no_vertex")
597
598   # CurvatureOnFace
599   Cylinder_1 = geompy.MakeCylinderRH(100, 50, 'Cylinder_r100_h150')
600   [Face_1,Face_2,Face_3] = geompy.ExtractShapes(Cylinder_1, geompy.ShapeType["FACE"], True, "Face")
601   curvature_1 = geompy.CurvatureOnFace(Face_2, px, vy, 'curvature_cyl_px_vy')
602   assert(abs(geompy.BasicProperties(curvature_1)[0] - 100) < 1e-07)
603   curvature_zero = geompy.CurvatureOnFace(Face_2, px, vz)
604   assert(geompy.MeasuOp.GetErrorCode() == "ZERO_CURVATURE")
605   assert(not curvature_zero)
606   isExcept = False
607   try:
608     # p0 is on cylinder axis, projection should fail
609     geompy.CurvatureOnFace(Face_2, p0, vy)
610   except:
611     isExcept = True
612   assert(isExcept)
613
614   print("DONE")