mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-12-26 17:30:35 +05:00
120 lines
3.6 KiB
Python
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 recieve 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)
|