Advertisement
drpexe

Untitled

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