# -*- coding: utf-8 -*-
-from geomsmesh import geompy, smesh
+from .geomsmesh import geompy, smesh
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
import math
import GEOM
#import NETGENPlugin
import logging
-from fissureGenerique import fissureGenerique
+from .fissureGenerique import fissureGenerique
-from triedreBase import triedreBase
-from genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
-from creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
-from construitFissureGenerale import construitFissureGenerale
-from sortEdges import sortEdges
+from .triedreBase import triedreBase
+from .genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
+from .creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
+from .construitFissureGenerale import construitFissureGenerale
+from .sortEdges import sortEdges
O, OX, OY, OZ = triedreBase()
class fissureCoude(fissureGenerique):
"""
- problème de fissure du Coude : version de base
+ probleme de fissure du Coude : version de base
maillage hexa
"""
# ---------------------------------------------------------------------------
def setParamGeometrieSaine(self):
"""
- Paramètres géométriques du tuyau coudé sain:
+ Parametres geometriques du tuyau coude sain:
angleCoude
r_cintr
l_tube_p1
Rotation_2 = geompy.MakeRotation(OZ, OY, angleCoude*math.pi/180.0)
tube_2 = geompy.MakePrismVecH(Rotation_1, Rotation_2, -l_tube_p2)
plan_y = geompy.MakePlaneLCS(None, 100000, 3)
- geompy.addToStudy( plan_y, "plan_y" )
- geompy.addToStudy( tube_1, "tube_1" )
- geompy.addToStudy( coude, "coude" )
- geompy.addToStudy( tube_2, "tube_2" )
+ geomPublish(initLog.debug, plan_y, "plan_y" )
+ geomPublish(initLog.debug, tube_1, "tube_1" )
+ geomPublish(initLog.debug, coude, "coude" )
+ geomPublish(initLog.debug, tube_2, "tube_2" )
P1 = O
- geompy.addToStudy( P1, "P1" )
+ geompy.addToStudy(P1, "P1" )
op2 = geompy.MakeVertex(0, 0, -l_tube_p1)
P2 = geompy.MakeRotation(op2, axe, angleCoude*math.pi/180.0)
P2 = geompy.MakeTranslationVectorDistance(P2, Rotation_2, -l_tube_p2)
- geompy.addToStudy( P2, "P2" )
+ geompy.addToStudy(P2, "P2" )
# --- tube coude sain
geometrieSaine = geompy.MakePartition([tube_1, coude, tube_2, P1, P2], [plan_y], [], [], geompy.ShapeType["SOLID"], 0, [], 1)
- geompy.addToStudy( geometrieSaine, self.nomCas )
+ geomPublish(initLog.debug, geometrieSaine, self.nomCas )
[P1, P2] = geompy.RestoreGivenSubShapes(geometrieSaine, [P1, P2], GEOM.FSM_GetInPlaceByHistory, False, True)
xmin = -de -r_cintr -l_tube_p2
grped = geompy.CutGroups(grpedy0, long_p1)
grped = geompy.CutGroups(grped, long_p2)
ep = geompy.CutGroups(grped, long_coude)
- geompy.addToStudyInFather( geometrieSaine, long_p1, 'long_p1' )
- geompy.addToStudyInFather( geometrieSaine, ep, 'ep' )
- geompy.addToStudyInFather( geometrieSaine, long_coude, 'long_coude' )
- geompy.addToStudyInFather( geometrieSaine, circ_g, 'circ_g' )
- geompy.addToStudyInFather( geometrieSaine, circ_d, 'circ_d' )
- geompy.addToStudyInFather( geometrieSaine, long_p2, 'long_p2' )
+ geomPublishInFather(initLog.debug, geometrieSaine, long_p1, 'long_p1' )
+ geomPublishInFather(initLog.debug, geometrieSaine, ep, 'ep' )
+ geomPublishInFather(initLog.debug, geometrieSaine, long_coude, 'long_coude' )
+ geomPublishInFather(initLog.debug, geometrieSaine, circ_g, 'circ_g' )
+ geomPublishInFather(initLog.debug, geometrieSaine, circ_d, 'circ_d' )
+ geomPublishInFather(initLog.debug, geometrieSaine, long_p2, 'long_p2' )
# --- face extremite tube (EXTUBE)
facesIds = geompy.GetShapesOnPlaneIDs(geometrieSaine, geompy.ShapeType["FACE"], OZ, GEOM.ST_ON)
EXTUBE = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["FACE"])
geompy.UnionIDs(EXTUBE, facesIds)
- geompy.addToStudyInFather( geometrieSaine, EXTUBE, 'EXTUBE' )
+ geomPublishInFather(initLog.debug, geometrieSaine, EXTUBE, 'EXTUBE' )
# --- edge bord extremite tube (BORDTU)
edgesIds.append(edge)
BORDTU = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["EDGE"])
geompy.UnionIDs(BORDTU, edgesIds)
- geompy.addToStudyInFather( geometrieSaine, BORDTU, 'BORDTU' )
+ geomPublishInFather(initLog.debug, geometrieSaine, BORDTU, 'BORDTU' )
# --- face origine tube (CLGV)
pp2 = geompy.MakeTranslationVectorDistance(P2, Rotation_2, 10)
vec2 = geompy.MakeVector(P2, pp2)
- #geompy.addToStudy(vec2, 'vec2')
+ #geomPublish(initLog.debug, vec2, 'vec2')
facesIds = geompy.GetShapesOnPlaneIDs(geometrieSaine, geompy.ShapeType["FACE"], vec2, GEOM.ST_ON)
CLGV = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["FACE"])
geompy.UnionIDs(CLGV, facesIds)
- geompy.addToStudyInFather( geometrieSaine, CLGV, 'CLGV' )
+ geomPublishInFather(initLog.debug, geometrieSaine, CLGV, 'CLGV' )
# --- peau tube interieur (PEAUINT)
extru2 = geompy.MakePrismVecH(rot1, Rotation_2, -l_tube_p2)
interne = geompy.MakeFuse(extru1, revol1)
interne = geompy.MakeFuse(extru2, interne)
- geompy.addToStudy(interne, 'interne')
+ geomPublish(initLog.debug, interne, 'interne')
facesIds = geompy.GetShapesOnShapeIDs(interne, geometrieSaine, geompy.ShapeType["FACE"], GEOM.ST_ONIN)
PEAUINT = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["FACE"])
geompy.UnionIDs(PEAUINT, facesIds)
- geompy.addToStudyInFather( geometrieSaine, PEAUINT, 'PEAUINT' )
+ geomPublishInFather(initLog.debug, geometrieSaine, PEAUINT, 'PEAUINT' )
# --- peau tube exterieur (PEAUEXT)
- cercle1 = geompy.MakeCircle(centre, OZ, de/2.)
- extru1 = geompy.MakePrismVecH(cercle1, OZ, l_tube_p1)
- revol1 = geompy.MakeRevolution(cercle1, axe, angleCoude*math.pi/180.0)
- rot1 = geompy.MakeRotation(cercle1, axe, angleCoude*math.pi/180.0)
+ Disk_3 = geompy.MakeDiskPntVecR(centre, OZ, de/2. +epais)
+ extru1 = geompy.MakePrismVecH(Disk_3, OZ, l_tube_p1)
+ revol1 = geompy.MakeRevolution(Disk_3, axe, angleCoude*math.pi/180.0)
+ rot1 = geompy.MakeRotation(Disk_3, axe, angleCoude*math.pi/180.0)
extru2 = geompy.MakePrismVecH(rot1, Rotation_2, -l_tube_p2)
externe = geompy.MakeFuse(extru1, revol1)
externe = geompy.MakeFuse(extru2, externe)
- geompy.addToStudy(externe, 'externe')
+ geomPublish(initLog.debug, externe, 'externe')
facesIds = geompy.GetShapesOnShapeIDs(externe, geometrieSaine, geompy.ShapeType["FACE"], GEOM.ST_ON)
PEAUEXT = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["FACE"])
geompy.UnionIDs(PEAUEXT, facesIds)
- geompy.addToStudyInFather( geometrieSaine, PEAUEXT, 'PEAUEXT' )
+ geomPublishInFather(initLog.debug, geometrieSaine, PEAUEXT, 'PEAUEXT' )
# --- solide sain
volIds = geompy.SubShapeAllIDs(geometrieSaine, geompy.ShapeType["SOLID"])
COUDE = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["SOLID"])
geompy.UnionIDs(COUDE, volIds)
- geompy.addToStudyInFather( geometrieSaine, COUDE, 'COUDSAIN' )
+ geomPublishInFather(initLog.debug, geometrieSaine, COUDE, 'COUDSAIN' )
geometriesSaines = [geometrieSaine, long_p1, ep, long_coude, circ_g, circ_d, long_p2, P1, P2, EXTUBE, BORDTU, CLGV, PEAUINT, PEAUEXT, COUDE]
# ---------------------------------------------------------------------------
def setParamShapeFissure(self):
"""
- paramètres de la fissure pour le tuyau coude
- profondeur : 0 < profondeur <= épaisseur
+ parametres de la fissure pour le tuyau coude
+ profondeur : 0 < profondeur <= epaisseur
rayonPipe : rayon du pipe correspondant au maillage rayonnant
- lenSegPipe : longueur des mailles rayonnantes le long du fond de fissure (= rayonPipe par défaut)
+ lenSegPipe : longueur des mailles rayonnantes le long du fond de fissure (= rayonPipe par defaut)
azimut : entre 0 et 360°
alpha : 0 < alpha < angleCoude
longueur : <=2*profondeur ==> force une fissure elliptique (longueur/profondeur = grand axe/petit axe).
- orientation : 0° : longitudinale, 90° : circonférentielle, autre : uniquement fissures elliptiques
- lgInfluence : distance autour de la shape de fissure a remailler (si 0, pris égal à profondeur. A ajuster selon le maillage)
- elliptique : True : fissure elliptique (longueur/profondeur = grand axe/petit axe); False : fissure longue (fond de fissure de profondeur constante, demi-cercles aux extrémites)
- pointIn_x : optionnel coordonnées x d'un point dans le solide, pas trop loin du centre du fond de fissure (idem y,z)
+ orientation : 0° : longitudinale, 90° : circonferentielle, autre : uniquement fissures elliptiques
+ lgInfluence : distance autour de la shape de fissure a remailler (si 0, pris egal a profondeur. A ajuster selon le maillage)
+ elliptique : True : fissure elliptique (longueur/profondeur = grand axe/petit axe); False : fissure longue (fond de fissure de profondeur constante, demi-cercles aux extremites)
+ pointIn_x : optionnel coordonnees x d'un point dans le solide, pas trop loin du centre du fond de fissure (idem y,z)
externe : True : fissure face externe, False : fissure face interne
"""
logging.info("setParamShapeFissure %s", self.nomCas)
externe = shapeFissureParams['externe']
lgInfluence = shapeFissureParams['lgInfluence']
self.elliptique = False
- if shapeFissureParams.has_key('elliptique'):
+ if 'elliptique' in shapeFissureParams:
self.elliptique = shapeFissureParams['elliptique']
-
+
azimut = -azimut # axe inverse / ASCOUF
axe = geompy.MakeTranslation(OY, -r_cintr, 0, -l_tube_p1)
- geompy.addToStudy(axe,"axe")
-
+ geomPublish(initLog.debug, axe,"axe")
+
if not lgInfluence:
lgInfluence = profondeur
lgfond = longueur -2*profondeur
angle = lgfond/(2*raybor)
pb = geompy.MakeVertex(raybor, 0, 0)
- pi = geompy.MakeVertex(rayint, 0, 0)
+ pi = geompy.MakeVertex(rayint, 0, 0)
pbl = geompy.MakeRotation(pb, OZ, angle)
pbr = geompy.MakeRotation(pb, OZ, -angle)
- geompy.addToStudy(pbl,"pbl")
- geompy.addToStudy(pbr,"pbr")
+ geomPublish(initLog.debug, pbl,"pbl")
+ geomPublish(initLog.debug, pbr,"pbr")
pal = geompy.MakeTranslationVector(pbl, OZ)
par = geompy.MakeTranslationVector(pbr, OZ)
axl = geompy.MakeVector(pbl,pal)
pt = geompy.MakeRotation(pil, axl, angi)
points.append(pt)
for i in range(nbp):
- angi = angle -2.0*i*angle/nbp
+ angi = angle -2.0*i*angle/nbp
pt = geompy.MakeRotation(pi, OZ, angi)
points.append(pt)
for i in range(nbp+1):
pt = geompy.MakeTranslation(pt, 0, 0, -l_tube_p1)
pt = geompy.MakeRotation(pt, axe, alpha*math.pi/180.)
points[i] = pt
- wire0 = geompy.MakeInterpol(points[0:nbp+1])
- wire1 = geompy.MakeInterpol(points[nbp:2*nbp+1])
- wire2 = geompy.MakeInterpol(points[2*nbp:3*nbp+1])
+ wire0 = geompy.MakeInterpol(points[0:nbp+1])
+ wire1 = geompy.MakeInterpol(points[nbp:2*nbp+1])
+ wire2 = geompy.MakeInterpol(points[2*nbp:3*nbp+1])
#wiretube = geompy.MakeInterpol(points)
wiretube=geompy.MakeWire([wire0,wire1,wire2])
- geompy.addToStudy(wiretube,"wiretube")
-
+ geomPublish(initLog.debug, wiretube,"wiretube")
+
pe = geompy.MakeVertex(rayext, 0, 0)
pe = geompy.MakeRotation(pe, OZ, azimut*math.pi/180.)
pe = geompy.MakeTranslation(pe, 0, 0, -l_tube_p1)
pe = geompy.MakeRotation(pe, axe, alpha*math.pi/180.)
-
+
arce = geompy.MakeArc(points[0], pe, points[-1])
- geompy.addToStudy(arce,"arce")
-
+ geomPublish(initLog.debug, arce,"arce")
+
facefiss = geompy.MakeFaceWires([arce, wiretube], 1)
- geompy.addToStudy( facefiss, 'facefissPlace' )
-
+ geomPublish(initLog.debug, facefiss, 'facefissPlace' )
+
pc = geompy.MakeVertex((raybor + rayint)/2.0, 0, 0)
centre = geompy.MakeRotation(pc, OZ, azimut*math.pi/180.)
centre = geompy.MakeTranslation(centre, 0, 0, -l_tube_p1)
centre = geompy.MakeRotation(centre, axe, alpha*math.pi/180.)
- geompy.addToStudy( centre, 'centrefissPlace' )
-
+ geomPublish(initLog.debug, centre, 'centrefissPlace' )
+
wiretube = geompy.GetInPlace(facefiss, wiretube)
- geompy.addToStudy(wiretube, 'wiretubePlace' )
+ geomPublish(initLog.debug, wiretube, 'wiretubePlace' )
try:
edgetube = geompy.MakeEdgeWire(wiretube)
- geompy.addToStudy(edgetube,"edgetube")
+ geomPublish(initLog.debug, edgetube,"edgetube")
except:
logging.debug("erreur MakeEdgeWire sur fond de fissure, on fait sans")
edgetube = None
else:
raybor = de/2. - epais
dp = +1.0
- prof = dp * profondeur
+ prof = dp * profondeur
lgfond = longueur -2*profondeur
cosaz = math.cos(azimut*math.pi/180.)
sinaz = math.sin(azimut*math.pi/180.)
xs = []
totx = 0
for i in range(nbp+2):
- x = math.sin(i*math.pi/(nbp+1)) # fonction de répartition des points : distance relative
+ x = math.sin(i*math.pi/(nbp+1)) # fonction de repartition des points : distance relative
x2 = x*x
- totx += x2
+ totx += x2
xs.append(totx)
- logging.debug("x2: %s, totx: %s", x2, totx)
+ logging.debug("x2: %s, totx: %s", x2, totx)
for i in range(nbp+1):
- #posi = nbp -i # répartition équidistante des points sur la courbe
- posi = nbp*(1 -xs[i]/totx) # points plus resserrés aux extrémités de la courbe
+ #posi = nbp -i # repartition equidistante des points sur la courbe
+ posi = nbp*(1 -xs[i]/totx) # points plus resserres aux extremites de la courbe
angi = -dp*posi*(5.0*math.pi/8.0)/nbp
pt = geompy.MakeRotation(pil, axl, angi)
points.append(pt)
curves.append(geompy.MakeInterpol(points))
point0 = points[0]
- geompy.addToStudy(curves[-1],"curve0")
+ geomPublish(initLog.debug, curves[-1],"curve0")
# for i, pt in enumerate(points):
# name = "point%d"%i
-# geompy.addToStudyInFather(curves[-1], pt, name)
+# geomPublishInFather(initLog.debug,curves[-1], pt, name)
points = []
nbp = 3*nbp1
totx = 0
for i in range(nbp+1):
x = math.sin(i*math.pi/nbp)
- #x = 1.0 # répartition équidistante des points sur la courbe
- x2 = x*x # points plus resserrés aux extrémités de la courbe
- totx += x2
+ #x = 1.0 # repartition equidistante des points sur la courbe
+ x2 = x*x # points plus resserres aux extremites de la courbe
+ totx += x2
xs.append(totx)
- logging.debug("x2: %s, totx: %s", x2, totx)
+ logging.debug("x2: %s, totx: %s", x2, totx)
for i in range(nbp):
- angi = alfrd -angle +2.0*angle*xs[i]/totx
+ angi = alfrd -angle +2.0*angle*xs[i]/totx
pt = geompy.MakeRotation(pi, axe, angi)
points.append(pt)
curves.append(geompy.MakeInterpol(points))
- geompy.addToStudy(curves[-1],"curve1")
+ geomPublish(initLog.debug, curves[-1],"curve1")
# for i, pt in enumerate(points):
# name = "point%d"%i
-# geompy.addToStudyInFather(curves[-1], pt, name)
+# geomPublishInFather(initLog.debug,curves[-1], pt, name)
points = []
nbp = 3*nbp1
for i in range(nbp+2):
x = math.sin(i*math.pi/(nbp+1))
x2 = x*x
- totx += x2
+ totx += x2
xs.append(totx)
- logging.debug("x2: %s, totx: %s", x2, totx)
+ logging.debug("x2: %s, totx: %s", x2, totx)
for i in range(nbp+1):
- #posi = nbp -i # répartition équidistante des points sur la courbe
- posi = nbp*xs[i]/totx # points plus resserrés aux extrémités de la courbe
+ #posi = nbp -i # repartition equidistante des points sur la courbe
+ posi = nbp*xs[i]/totx # points plus resserres aux extremites de la courbe
angi = dp*posi*(5.0*math.pi/8.0)/nbp
pt = geompy.MakeRotation(pir, axr, angi)
points.append(pt)
curves.append(geompy.MakeInterpol(points))
point1 = points[-1]
- geompy.addToStudy(curves[-1],"curve2")
+ geomPublish(initLog.debug, curves[-1],"curve2")
# for i, pt in enumerate(points):
# name = "point%d"%i
-# geompy.addToStudyInFather(curves[-1], pt, name)
-
+# geomPublishInFather(initLog.debug,curves[-1], pt, name)
+
wiretube = geompy.MakeWire(curves)
- geompy.addToStudy(wiretube,"wiretube")
+ geomPublish(initLog.debug, wiretube,"wiretube")
try:
edgetube = geompy.MakeEdgeWire(wiretube)
- geompy.addToStudy(edgetube,"edgetube")
+ geomPublish(initLog.debug, edgetube,"edgetube")
except:
logging.debug("erreur MakeEdgeWire sur fond de fissure, on fait sans")
edgetube = None
-
+
pts = []
pts.append(point0)
dpr = prof*math.cos(5.0*math.pi/8.0)
pe = geompy.MakeTranslation(pb, dpr*cosaz, dpr*sinaz, 0., "pe")
for i in range(nbp):
- angi = alfrd -angle +2.0*i*angle/nbp
+ angi = alfrd -angle +2.0*i*angle/nbp
pt = geompy.MakeRotation(pe, axe, angi)
pts.append(pt)
pts.append(point1)
arce = geompy.MakeInterpol(pts)
- geompy.addToStudy(arce,"arce")
-
+ geomPublish(initLog.debug, arce,"arce")
+
facefiss = geompy.MakeFaceWires([arce, wiretube], 0)
- geompy.addToStudy( facefiss, 'facefissPlace' )
-
+ geomPublish(initLog.debug, facefiss, 'facefissPlace' )
+
pc = geompy.MakeTranslation(pb, 0.5*prof*cosaz, 0.5*prof*sinaz, 0.)
centre = geompy.MakeRotation(pc, axe, alfrd)
- geompy.addToStudy( centre, 'centrefissPlace' )
-
+ geomPublish(initLog.debug, centre, 'centrefissPlace' )
+
edges = geompy.ExtractShapes(facefiss, geompy.ShapeType["EDGE"], True)
edgesTriees, minl, maxl = sortEdges(edges)
- edges = edgesTriees[:-1] # la plus grande correspond à arce, on l'elimine
+ edges = edgesTriees[:-1] # la plus grande correspond a arce, on l'elimine
wiretube = geompy.MakeWire(edges)
#wiretube = edgesTriees[-1]
- geompy.addToStudy(wiretube, 'wiretubePlace' )
+ geomPublish(initLog.debug, wiretube, 'wiretubePlace' )
# ---------------------------------------------------------
else:
raybor = de/2. - epais
dp = +1.0
- prof = dp * profondeur
+ prof = dp * profondeur
cosaz = math.cos(azimut*math.pi/180.)
sinaz = math.sin(azimut*math.pi/180.)
alfrd = alpha*math.pi/180.
cox = geompy.VectorCoordinates(ax1)
coy = geompy.VectorCoordinates(ay1)
localLCS = geompy.MakeMarker(coo[0], coo[1], coo[2], cox[0], cox[1], cox[2], coy[0], coy[1], coy[2], "localLCS")
-
+
pco = geompy.MakeVertex(0, 0, -profondeur, "pco")
pao = geompy.MakeRotation(pco, OY, 0.6*math.pi, "pao")
pbo = geompy.MakeRotation(pco, OY, -0.6*math.pi, "pbo")
arci = geompy.MakePosition(arco, originLCS, localLCS, "arci")
arce = geompy.MakePosition(lino, originLCS, localLCS, "arce")
facefiss = geompy.MakeFaceWires([arce, arci], 0)
- geompy.addToStudy( facefiss, 'facefissPlace' )
+ geomPublish(initLog.debug, facefiss, 'facefissPlace' )
edges = geompy.ExtractShapes(facefiss, geompy.ShapeType["EDGE"], True)
edgesTriees, minl, maxl = sortEdges(edges)
- edgetube = edgesTriees[-1] # la plus grande correspond à arci
+ edgetube = edgesTriees[-1] # la plus grande correspond a arci
wiretube = edgetube
-
+
pc = geompy.MakeTranslation(pb, 0.5*prof*cosaz, 0.5*prof*sinaz, 0.)
centre = geompy.MakeRotation(pc, axe, alfrd)
- geompy.addToStudy( centre, 'centrefissPlace' )
+ geomPublish(initLog.debug, centre, 'centrefissPlace' )
coordsNoeudsFissure = genereMeshCalculZoneDefaut(facefiss, profondeur/2. ,profondeur)
# ---------------------------------------------------------------------------
def setParamMaillageFissure(self):
"""
- Paramètres du maillage de la fissure pour le tuyau coudé
- Voir également setParamShapeFissure, paramètres rayonPipe et lenSegPipe.
+ Parametres du maillage de la fissure pour le tuyau coude
+ Voir egalement setParamShapeFissure, parametres rayonPipe et lenSegPipe.
nbSegRad = nombre de couronnes
nbSegCercle = nombre de secteurs
- areteFaceFissure = taille cible de l'arête des triangles en face de fissure.
+ areteFaceFissure = taille cible de l'arete des triangles en face de fissure.
"""
self.maillageFissureParams = dict(nomRep = '.',
nomFicSain = self.nomCas,