home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Multimedia / k3d-setup-0.7.11.0.exe / share / k3d / scripts / scripted_plugins / ac3d_exporter.py next >
Encoding:
Text File  |  2008-02-23  |  1.9 KB  |  64 lines

  1. #python
  2.  
  3. # k3d:plugin-class="document"
  4. # k3d:plugin-type="NullOutputScript"
  5. # k3d:plugin-name="AC3DWriter"
  6. # k3d:plugin-description="Exports a mesh to AC3D format"
  7.  
  8. import k3d
  9.  
  10. #Add the required user properties
  11. if not Node.has_property("input_mesh"):
  12.   Node.create_property("k3d::mesh*", "input_mesh", "Input Mesh", "The mesh that will have its points counted")
  13. if not Node.has_property("output_file"):
  14.   Node.create_property("k3d::filesystem::path", "output_file", "Output File", "The exported AC3D mesh file")
  15.  
  16. # mesh components
  17. points =  Node.__getattr__("input_mesh").points()
  18. polyhedra = Node.__getattr__("input_mesh").polyhedra()
  19. edge_points = polyhedra.edge_points()
  20. clockwise_edges = polyhedra.clockwise_edges()
  21. face_first_loops = polyhedra.face_first_loops()
  22. loop_first_edges = polyhedra.loop_first_edges()
  23.  
  24. # open the file
  25. f = open(str(Node.__getattr__("output_file")), 'w')
  26.  
  27. #header
  28. f.write("AC3Db\n")
  29.  
  30. #set a default material (todo: use K-3D assigned materials)
  31. f.write("MATERIAL \"ac3dmat1\" rgb 1 1 1  amb 0.2 0.2 0.2  emis 0 0 0  spec 0.5 0.5 0.5  shi 10  trans 0\n")
  32.  
  33. #Create a world object with one child
  34. f.write("OBJECT world\n")
  35. f.write("kids 1\n")
  36. f.write("OBJECT poly\n")
  37.  
  38. # write points array
  39. f.write("numvert " + str(len(points)) + "\n")
  40. for i in range(len(points)):
  41.   f.write(str(points[i][0]) + " " + str(points[i][1]) + " " + str(points[i][2]) + "\n")
  42.  
  43. # Add faces
  44. f.write("numsurf " + str(len(face_first_loops)) + "\n")
  45. for face in range(len(face_first_loops)):
  46.   f.write("SURF 0x0\n")
  47.   f.write("mat 0\n")
  48.   first_edge = loop_first_edges[face_first_loops[face]]
  49.   edge = first_edge
  50.   facepoints = []
  51.   for n in range(1, len(clockwise_edges)):
  52.     facepoints.append(edge_points[edge])
  53.     edge = clockwise_edges[edge]
  54.     if edge == first_edge:
  55.       break
  56.   f.write("refs " + str(len(facepoints)) + "\n")
  57.   for corner in facepoints:
  58.     f.write(str(corner) + " 0 1\n") # todo: texture coordinates
  59.  
  60. f.write("kids 0\n")
  61. # commit to file
  62. f.close()
  63.  
  64.