X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FTools%2FblocFissure%2Fgmu%2FinsereFissureElliptique.py;fp=src%2FTools%2FblocFissure%2Fgmu%2FinsereFissureElliptique.py;h=95d4a627970fafb40b8b822eca918318aff58900;hb=e9e7af000e6d84b90aaa62d06f8c28ab093b0745;hp=0000000000000000000000000000000000000000;hpb=8c0cc49261c88cde61a96c8642ac89e061ff1fd8;p=modules%2Fsmesh.git diff --git a/src/Tools/blocFissure/gmu/insereFissureElliptique.py b/src/Tools/blocFissure/gmu/insereFissureElliptique.py new file mode 100644 index 000000000..95d4a6279 --- /dev/null +++ b/src/Tools/blocFissure/gmu/insereFissureElliptique.py @@ -0,0 +1,196 @@ +# -*- coding: utf-8 -*- + +import logging +import salome +from geomsmesh import geompy +from geomsmesh import smesh +import SMESH +import math + +from partitionBlocDefaut import partitionBlocDefaut +from facesVolumesToriques import facesVolumesToriques +from facesCirculaires import facesCirculaires +from propagateTore import propagateTore +from sortGeneratrices import sortGeneratrices +from facesFissure import facesFissure +from facesToreInBloc import facesToreInBloc +from shapeSurFissure import shapeSurFissure +from meshBlocPart import meshBlocPart +from enleveDefaut import enleveDefaut +from regroupeSainEtDefaut import RegroupeSainEtDefaut +from putName import putName + +# ----------------------------------------------------------------------------- +# --- procedure complete fissure elliptique + +def insereFissureElliptique(geometriesSaines, maillagesSains, + shapesFissure, shapeFissureParams, + maillageFissureParams, elementsDefaut, step=-1): + """ + TODO: a completer + """ + logging.info('start') + + geometrieSaine = geometriesSaines[0] + maillageSain = maillagesSains[0] + isHexa = maillagesSains[1] + shapeDefaut = shapesFissure[0] + tailleDefaut = shapesFissure[2] + pipe0 = shapesFissure[4] + gener1 = shapesFissure[5] + pipe1 = shapesFissure[6] + facefis1 = shapesFissure[7] + plane1 = shapesFissure[8] + ellipsoide1 = shapesFissure[9] + + + demiGrandAxe = shapeFissureParams['demiGrandAxe'] + demiPetitAxe = shapeFissureParams['demiPetitAxe'] + orientation = shapeFissureParams['orientation'] + + nomRep = maillageFissureParams['nomRep'] + nomFicSain = maillageFissureParams['nomFicSain'] + nomFicFissure = maillageFissureParams['nomFicFissure'] + + nbsegExt = maillageFissureParams['nbsegExt'] # 5 + nbsegGen = maillageFissureParams['nbsegGen'] # 25 + nbsegRad = maillageFissureParams['nbsegRad'] # 5 + scaleRad = maillageFissureParams['scaleRad'] # 4 + nbsegCercle = maillageFissureParams['nbsegCercle'] # 6 + nbsegFis = maillageFissureParams['nbsegFis'] # 20 + lensegEllipsoide = maillageFissureParams['lensegEllipso'] # 1.0 + + fichierMaillageSain = nomRep + '/' + nomFicSain + '.med' + fichierMaillageFissure = nomRep + '/' + nomFicFissure + '.med' + + facesDefaut = elementsDefaut[0] + centreDefaut = elementsDefaut[1] + normalDefaut = elementsDefaut[2] + extrusionDefaut = elementsDefaut[3] + dmoyen = elementsDefaut[4] + bordsPartages = elementsDefaut[5] + fillconts = elementsDefaut[6] + idFilToCont = elementsDefaut[7] + maillageSain = elementsDefaut[8] + internalBoundary = elementsDefaut[9] + zoneDefaut = elementsDefaut[10] + zoneDefaut_skin = elementsDefaut[11] + zoneDefaut_internalFaces = elementsDefaut[12] + zoneDefaut_internalEdges = elementsDefaut[13] + + ## --- ellipse incomplete : generatrice + #if step == 5: + #return None + + #allonge = demiGrandAxe/demiPetitAxe + #rayonTore = demiPetitAxe/5.0 + #generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part = self.toreFissure(demiPetitAxe, allonge, rayonTore) + #ellipsoide = self.ellipsoideDefaut(demiPetitAxe, allonge, rayonTore) + + ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure + #if step == 6: + #return None + + #pipe0 = self.rotTrans(Pipe_1, orientation, centreDefaut, normalDefaut) + #gener1 = self.rotTrans(generatrice, orientation, centreDefaut, normalDefaut) + #pipe1 = self.rotTrans(Pipe1Part, orientation, centreDefaut, normalDefaut) + #facefis1 = self.rotTrans(FaceFissure, orientation, centreDefaut, normalDefaut) + #plane1 = self.rotTrans(Plane_1, orientation, centreDefaut, normalDefaut) + #ellipsoide1 = self.rotTrans(ellipsoide, orientation, centreDefaut, normalDefaut) + + #geompy.addToStudy( pipe0, 'pipe0' ) + #geompy.addToStudy( gener1, 'gener1' ) + #geompy.addToStudy( pipe1, 'pipe1' ) + #geompy.addToStudy( facefis1, 'facefis1' ) + #geompy.addToStudy( plane1, 'plane1' ) + #geompy.addToStudy( ellipsoide1, 'ellipsoide1' ) + + # --- partition du bloc défaut par génératrice, tore et plan fissure + if step == 7: + return None + + [blocPartition, blocp, tore, + faceFissure, facesExternes, facesExtBloc, facesExtElli, + aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \ + partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1, + facefis1, ellipsoide1) + if not isHexa: + edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain + + # --- TORE + # --- faces toriques du tore + if step == 8: + return None + + [facetore1, facetore2, volumeTore1, volumeTore2] = facesVolumesToriques(tore, plane1, facesDefaut) + + # --- faces 1/2 circulaires et edges dans le plan de fissure + if step == 9: + return None + + [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore) + + # --- recherche et classement des edges du tore par propagate + if step == 10: + return None + + [diams, circles, geners] = propagateTore(tore) + + # --- tri par longueur des 3 génératrices + if step == 11: + return None + + [genext, genint, gencnt] = sortGeneratrices(tore, geners) + + # --- faces fissure dans et hors tore, et edges face hors tore + if step == 12: + return None + + [facefissintore, facefissoutore, edgeint, edgeext, reverext] = \ + facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint) + + # --- identification des faces tore et fissure dans le solide hors tore + if step == 13: + return None + + [blocFaceFiss, blocFaceTore1, blocFaceTore2] = \ + facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2) + + # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face) + + #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt) + if step == 14: + return None + + extrusionFaceFissure, normfiss = shapeSurFissure(plane1) + + # --- maillage du bloc partitionne + + if step == 15: + return None + + [bloc1, blocComplet] = \ + meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces, + gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli, + aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords, + nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle, + nbsegFis, dmoyen, lensegEllipsoide) + + if step == 16: + return None + maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges) + + if step == 17: + return None + maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES') + + if step == 18: + return None + maillageComplet.ExportMED( fichierMaillageFissure, 0, SMESH.MED_V2_2, 1 ) + putName(maillageComplet, nomFicFissure) + logging.info("fichier maillage fissure : %s", fichierMaillageFissure) + + if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(1) + + return maillageComplet