Advertisement
drpexe

Untitled

Mar 16th, 2017
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.68 KB | None | 0 0
  1. from __future__ import print_function, unicode_literals
  2. import argparse
  3. import os
  4. import uuid
  5.  
  6. try:
  7.     import salome
  8.     from salome.geom import geomBuilder
  9.     from salome.smesh import smeshBuilder
  10. except ImportError:
  11.     raise ImportError("SALOME import failed. Are you running inside salome?")
  12.  
  13.  
  14. IGES_IGNORE_UNITS = False
  15.  
  16.  
  17. def main(args):
  18.     salome.salome_init()
  19.     geom = geomBuilder.New(salome.myStudy)
  20.     smesh = smeshBuilder.New(salome.myStudy)
  21.  
  22.     root_shape = geom.ImportIGES(args.input, IGES_IGNORE_UNITS)
  23.     faces = geom.ExtractShapes(root_shape, geom.ShapeType["FACE"])
  24.     print ("Number of extracted faces: {}".format(len(faces)))
  25.  
  26.     face_list = {}
  27.     for face in faces:
  28.         point_list = []
  29.         for point in geom.ExtractShapes(face, geom.ShapeType["VERTEX"], isSorted=False):
  30.             coords = geom.PointCoordinates(point)
  31.             point_list.append(coords)
  32.         face_name = str(uuid.uuid4())
  33.         face_list[face_name] = point_list
  34.  
  35.     with open(args.output, "w") as f:
  36.         f.write('<X3D version="3.2" profile="CADInterchange" xmlns="">\n')
  37.         f.write('   <Scene>\n')
  38.         f.write('       <CADPart name="{}">\n'.format(args.input))
  39.  
  40.         for face_name, point_list in face_list.iteritems():
  41.             f.write('           <CADFace name="{}">\n'.format(face_name))
  42.             f.write('               <Shape containerField="shape">\n')
  43.             f.write('                   <Appearance>\n')
  44.             f.write('                       <Material diffuseColor="0.8 0.8 0.8"></Material>\n')
  45.             f.write('                   </Appearance>\n')
  46.  
  47.             coord_index = range(len(point_list))  # [0, 1, ... , n]
  48.             coords = [coord for point in point_list for coord in point] # [x1, y1, z1, x2, y2, z2, ...]
  49.  
  50.             f.write('                   <IndexedFaceSet coordIndex="{} -1">\n'.format(
  51.                 " ".join(map(str, coord_index))))
  52.             f.write('                       <Coordinate point="{}"></Coordinate>\n'.format(
  53.                 " ".join(map(str, coords))))
  54.             f.write('                   </IndexedFaceSet>\n')
  55.             f.write('               </Shape>\n')
  56.             f.write('           </CADFace>\n')
  57.         f.write('       </CADPart>\n')
  58.         f.write('   </Scene>\n')
  59.         f.write('</X3D>\n')
  60.  
  61.     print ("Conversion ended. Number of faces: {}. Number of vertices: {}".format(
  62.         len(face_list), ""))
  63.  
  64. if __name__ == "__main__":
  65.     parser = argparse.ArgumentParser(prog='prepare-part', description='')
  66.     parser.add_argument("input")
  67.     parser.add_argument("output")
  68.     parser.set_defaults(func=main)
  69.     args = parser.parse_args()
  70.     args.func(args)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement