mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-04-25 12:22:03 +05:00
75 lines
2.4 KiB
Python
75 lines
2.4 KiB
Python
![]() |
#!/usr/bin/env python3
|
||
|
|
||
|
import sys
|
||
|
import salome
|
||
|
import medcoupling as mc
|
||
|
from math import pi
|
||
|
|
||
|
#salome.salome_init()
|
||
|
|
||
|
import GEOM
|
||
|
from salome.geom import geomBuilder
|
||
|
|
||
|
geompy = geomBuilder.New()
|
||
|
|
||
|
import SMESH, SALOMEDS
|
||
|
from salome.smesh import smeshBuilder
|
||
|
|
||
|
smesh = smeshBuilder.New()
|
||
|
|
||
|
def create_dual_mesh(mesh_ior, output_file, adapt_to_shape=True, mesh_name="MESH"):
|
||
|
""" Create a dual of the mesh in input_file into output_file
|
||
|
|
||
|
Args:
|
||
|
mesh_ior (string): corba Id of the Tetrahedron mesh
|
||
|
output_file (string): dual mesh file
|
||
|
"""
|
||
|
# Import mesh from file
|
||
|
# mesh = salome.orb.string_to_object(salome.salome_study.myStudy.FindObjectID(mesh_id).GetIOR())
|
||
|
mesh = salome.orb.string_to_object(mesh_ior)
|
||
|
if not mesh:
|
||
|
raise Exception("Could not find mesh using id: ", mesh_ior)
|
||
|
|
||
|
shape = mesh.GetShapeToMesh()
|
||
|
|
||
|
# We got a meshProxy so we need to convert pointer to MEDCoupling
|
||
|
int_ptr = mesh.ExportMEDCoupling(True, True)
|
||
|
dab = mc.FromPyIntPtrToDataArrayByte(int_ptr)
|
||
|
tetras = mc.MEDFileMesh.New(dab)[0]
|
||
|
# End of SMESH -> MEDCoupling part for dualmesh
|
||
|
|
||
|
tetras = mc.MEDCoupling1SGTUMesh(tetras)
|
||
|
polyh = tetras.computeDualMesh()
|
||
|
skin = tetras.buildUnstructured().computeSkin()
|
||
|
skin_polyh = polyh.buildUnstructured().computeSkin()
|
||
|
allNodesOnSkinPolyh = skin_polyh.computeFetchedNodeIds()
|
||
|
allNodesOnSkin = skin.computeFetchedNodeIds()
|
||
|
ptsAdded = allNodesOnSkinPolyh.buildSubstraction(allNodesOnSkin)
|
||
|
ptsAddedMesh = mc.MEDCouplingUMesh.Build0DMeshFromCoords( skin_polyh.getCoords()[ptsAdded] )
|
||
|
|
||
|
if adapt_to_shape:
|
||
|
ptsAddedCoo = ptsAddedMesh.getCoords()
|
||
|
ptsAddedCooModified = ptsAddedCoo[:]
|
||
|
|
||
|
# We need the geometry for that
|
||
|
# TODO : Loop on faces identify points associated to which face
|
||
|
faces = geompy.ExtractShapes(shape, geompy.ShapeType["FACE"], True)
|
||
|
#assert( len(faces) == 1 )
|
||
|
## projection des points ajoutés par le dual sur la surface
|
||
|
#for i,tup in enumerate(ptsAddedCooModified):
|
||
|
# vertex = geompy.MakeVertex(*tuple(tup))
|
||
|
# prj = geompy.MakeProjection(vertex, faces)
|
||
|
# newCoor = geompy.PointCoordinates( prj )
|
||
|
# ptsAddedCooModified[i] = newCoor
|
||
|
## assign coordinates with projected ones
|
||
|
#polyh.getCoords()[ptsAdded] = ptsAddedCooModified
|
||
|
|
||
|
print("Writing dual mesh in ", output_file)
|
||
|
polyh.setName(mesh_name)
|
||
|
polyh.write(output_file)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|