ode_convex_export.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!BPY
  2. """
  3. Name: 'ODE Convex...'
  4. Blender: 244
  5. Group: 'Export'
  6. Tooltip: 'Export to Open Dynamics.'
  7. """
  8. __author__ = "Rodrigo Hernandez"
  9. __url__ = ("http://www.ode.org")
  10. __version__ = "0.1"
  11. __bpydoc__ = """\
  12. ODE Convex Exporter
  13. This script Exports a Blender scene as a series of ODE Convex Geom data stored in a C header file.
  14. """
  15. import Blender
  16. import bpy
  17. #import struct
  18. def WriteMesh(file,ob):
  19. mesh = ob.getData(mesh=1)
  20. # Write Point Count
  21. file.write("unsigned int %s_pointcount = %d;\n" % (ob.getName(),len(mesh.verts)))
  22. # Write Plane Count
  23. file.write("unsigned int %s_planecount = %d;\n" % (ob.getName(),len(mesh.faces)))
  24. # Write Points
  25. file.write("dReal %s_points[%d]={\n" % (ob.getName(),(len(mesh.verts)*3)))
  26. for vert in mesh.verts:
  27. if vert.index==(len(mesh.verts)-1):
  28. file.write("%f,%f,%f\n};\n" % (vert.co[0],vert.co[1],vert.co[2]))
  29. else:
  30. file.write("%f,%f,%f,\n" % (vert.co[0],vert.co[1],vert.co[2]))
  31. # Write Polygons
  32. file.write("unsigned int %s_polygons[]={\n" % ob.getName())
  33. for face in mesh.faces:
  34. file.write("%d," % len(face.verts))
  35. for vert in face.verts:
  36. file.write("%d," % vert.index)
  37. if face.index==(len(mesh.faces)-1):
  38. file.write("\n};\n");
  39. else:
  40. file.write("\n");
  41. # Write Planes
  42. file.write("dReal %s_planes[]={\n" % ob.getName())
  43. for face in mesh.faces:
  44. # d calculated separatelly for code readability
  45. d = face.no[0]*face.verts[0].co[0]+face.no[1]*face.verts[0].co[1]+face.no[2]*face.verts[0].co[2]
  46. file.write("%f,%f,%f,%f,\n" % (face.no[0],face.no[1],face.no[2],d))
  47. file.write("};\n");
  48. # Entry Point
  49. sce = bpy.data.scenes.active
  50. in_editmode = Blender.Window.EditMode()
  51. if in_editmode: Blender.Window.EditMode(0)
  52. file = open("convex.h",mode='wt')
  53. for ob in sce.objects:
  54. if ob.getType()=='Mesh':
  55. WriteMesh(file,ob)
  56. file.close()
  57. if in_editmode:
  58. Blender.Window.EditMode(1)
  59. print "ODE Export Done"