ode_convex_export.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. def WriteMesh(file,ob):
  18. mesh = ob.getData(mesh=1)
  19. # Write Point Count
  20. file.write("unsigned int %s_pointcount = %d;\n" % (ob.getName(),len(mesh.verts)))
  21. # Write Plane Count
  22. file.write("unsigned int %s_planecount = %d;\n" % (ob.getName(),len(mesh.faces)))
  23. # Write Points
  24. file.write("dReal %s_points[%d]={\n" % (ob.getName(),(len(mesh.verts)*3)))
  25. for vert in mesh.verts:
  26. if vert.index==(len(mesh.verts)-1):
  27. file.write("%f,%f,%f\n};\n" % (vert.co[0],vert.co[1],vert.co[2]))
  28. else:
  29. file.write("%f,%f,%f,\n" % (vert.co[0],vert.co[1],vert.co[2]))
  30. # Write Polygons
  31. file.write("unsigned int %s_polygons[]={\n" % ob.getName())
  32. for face in mesh.faces:
  33. file.write("%d," % len(face.verts))
  34. for vert in face.verts:
  35. file.write("%d," % vert.index)
  36. if face.index==(len(mesh.faces)-1):
  37. file.write("\n};\n");
  38. else:
  39. file.write("\n");
  40. # Write Planes
  41. file.write("dReal %s_planes[]={\n" % ob.getName())
  42. for face in mesh.faces:
  43. # d calculated separatelly for code readability
  44. 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]
  45. file.write("%f,%f,%f,%f,\n" % (face.no[0],face.no[1],face.no[2],d))
  46. file.write("};\n");
  47. # Entry Point
  48. sce = bpy.data.scenes.active
  49. in_editmode = Blender.Window.EditMode()
  50. if in_editmode: Blender.Window.EditMode(0)
  51. file = open("convex.h",mode='wt')
  52. for ob in sce.objects:
  53. if ob.getType()=='Mesh':
  54. WriteMesh(file,ob)
  55. file.close()
  56. if in_editmode:
  57. Blender.Window.EditMode(1)
  58. print "ODE Export Done"