geom/doc/salome/examples/complex_objs_ex07.py

120 lines
3.6 KiB
Python

# Creation of a PipeShellsWithoutPath
import salome
salome.salome_init()
import GEOM
from salome.geom import geomBuilder
geompy = geomBuilder.New(salome.myStudy)
import salome
gg = salome.ImportComponentGUI("GEOM")
# Add a section based on quadrangles
# ----------------------------------
def section(s, p1, p2=None, p3=None, p4=None):
if p2==None:
q = p1
else:
q = geompy.MakeQuad4Vertices(p1, p2, p3, p4)
pass
s.append(q)
publish(q, "section")
return q
# find distance between two points
# -------------------------------
def Dist(p1,p2):
c1 = geompy.PointCoordinates(p1)
c2 = geompy.PointCoordinates(p2)
return math.sqrt( (c2[0]-c1[0])*(c2[0]-c1[0]) +
(c2[1]-c1[1])*(c2[1]-c1[1]) +
(c2[2]-c1[2])*(c2[2]-c1[2]) )
# return middle point
# -------------------------------
def MiddleVert(p1,p2):
c1 = geompy.PointCoordinates(p1)
c2 = geompy.PointCoordinates(p2)
return geompy.MakeVertex( (c2[0]+c1[0])/2, (c2[1]+c1[1])/2, (c2[2]+c1[2])/2 )
# Complex section
# result - 16 quads from lines
# pnt - point from path
# vec - direction from path
def MakeComplexSect(pnt,vec,rmax,rmin,nb):
dang = 1.0/nb/2
cmax = geompy.MakeCircle(pnt,vec,rmax)
cmin = geompy.MakeCircle(pnt,vec,rmin)
faces = []
for i in range(0,2*nb,2):
p1 = geompy.MakeVertexOnCurve(cmin,dang*i)
p2 = geompy.MakeVertexOnCurve(cmax,dang*(i+1))
p3 = geompy.MakeVertexOnCurve(cmin,dang*(i+2))
f = geompy.MakeQuad4Vertices(pnt,p1,p2,p3)
faces.append(f)
pass
shell = geompy.MakeSewing(faces,1.e-6)
return shell
#=======================================================
# Create simple path and receive points
# for section creation
#=======================================================
WirePath = geompy.MakeSketcher("Sketcher:F 0 0:T 60 0:T 40 0:R 0:C 100 90:",
[0, 0, 0, 0, 0, 1, 1, 0, 0])
vs = geompy.SubShapeAll(WirePath, geompy.ShapeType["VERTEX"])
#=======================================================
# Create shell sections
#=======================================================
shells = []
subbases = []
locs = []
# 1 section
shell = MakeComplexSect(vs[0], geompy.MakeVectorDXDYDZ(1,0,0), 60, 40, 16)
shells.append(shell)
vs1 = geompy.SubShapeAllSortedCentres(shell,geompy.ShapeType["VERTEX"])
locs.append(vs1[17])
# 2 section
shell = MakeComplexSect(vs[1], geompy.MakeVectorDXDYDZ(1,0,0), 80, 30, 16)
shells.append(shell)
vs2 = geompy.SubShapeAllSortedCentres(shell,geompy.ShapeType["VERTEX"])
locs.append(vs2[17])
# 3 section
shell = MakeComplexSect(vs[2], geompy.MakeVectorDXDYDZ(1,0,0), 60, 40, 16)
shells.append(shell)
vs3 = geompy.SubShapeAllSortedCentres(shell,geompy.ShapeType["VERTEX"])
locs.append(vs3[17])
# 4 section
shell = MakeComplexSect(vs[3], geompy.MakeVectorDXDYDZ(0,1,0), 40, 35, 16)
shells.append(shell)
vs4 = geompy.SubShapeAllSortedCentres(shell,geompy.ShapeType["VERTEX"])
locs.append(vs4[17])
#===========================================================
# Create Pipe
#===========================================================
Pipe = geompy.MakePipeShellsWithoutPath(shells,locs)
# add objects in the study
resc = geompy.MakeCompound(shells)
id_sec = geompy.addToStudy(resc,"sections")
resl = geompy.MakeCompound(locs)
id_loc = geompy.addToStudy(resl,"locations")
id_pipe = geompy.addToStudy(Pipe, "Pipe")
# display the sections, locations and pipe
gg.createAndDisplayGO(id_sec)
gg.createAndDisplayGO(id_loc)
gg.createAndDisplayGO(id_pipe)
gg.setDisplayMode(id_pipe,1)