├── README.md └── blender_curve_export.py /README.md: -------------------------------------------------------------------------------- 1 | # Blender curve threejs export 2 | 3 | Used with an UI by [Blender_GLTF_Scripts](https://github.com/utsuboco/blender_gltf_scripts) 4 | 5 | Will generate an es6 file with all the curves of your Blender scene, already formated for Threejs. 6 | 7 | 8 | ## Usage: 9 | 10 | ```jsx 11 | import {curveA} from './BlenderFileName.curves' 12 | 13 | const points = curveA() 14 | console.log(points) // <-- [THREE.Vector3()] 15 | const path = new CatmullRomCurve3(points) 16 | ``` 17 | 18 | ## Template generated: 19 | ```jsx 20 | import * as THREE from 'three'; 21 | 22 | const format = () => { 23 | for (var i = 0; i < points.length; i++) { 24 | var x = points[i][0]; 25 | var y = points[i][1]; 26 | var z = points[i][2]; 27 | points[i] = new THREE.Vector3(x, z, -y); 28 | } 29 | return points 30 | } 31 | 32 | export const curveA = () => { 33 | const points = [...] // <-- exported from blender 34 | return format(points); 35 | } 36 | 37 | export const curveB = () => { 38 | const points = [...] // <-- exported from blender 39 | return format(points); 40 | } 41 | ``` 42 | 43 | -------------------------------------------------------------------------------- /blender_curve_export.py: -------------------------------------------------------------------------------- 1 | import bpy 2 | import os 3 | 4 | 5 | currPath = os.path.splitext(bpy.data.filepath)[0]+ ".curves.js" 6 | file = open(currPath, "w") 7 | file.write('import * as THREE from \'three\';\n') 8 | 9 | file.write("const format = (points) => {\n") 10 | file.write("for (var i = 0; i < points.length; i++) {\n") 11 | file.write(" var x = points[i][0];\n") 12 | file.write(" var y = points[i][1];\n") 13 | file.write(" var z = points[i][2];\n") 14 | file.write(" points[i] = new THREE.Vector3(x, z, -y);\n") 15 | file.write("}\n") 16 | file.write("return points;\n") 17 | file.write("}\n") 18 | 19 | for ob in bpy.data.objects.values() : 20 | if ob.type == 'CURVE' : 21 | file.write('\n') 22 | file.write("export const %s = () => {\n const points = [\n" % ob.name.replace('.', '')) 23 | for spline in ob.data.splines : 24 | curvetype = spline.type 25 | print('curve type:', curvetype) 26 | 27 | if curvetype == 'NURBS' or 'POLY': 28 | if len(spline.points) > 0 : 29 | for bezier_point in spline.points.values() : 30 | co = bezier_point.co @ ob.matrix_world 31 | file.write("[%.3f, %.3f, %.3f], " % (co.x, co.y, co.z )) 32 | 33 | if curvetype == 'BEZIER': 34 | if len(spline.bezier_points) > 0 : 35 | for bezier_point in spline.bezier_points.values() : 36 | co = bezier_point.co @ ob.matrix_world 37 | file.write("[%.3f, %.3f, %.3f], " % (co.x, co.y, co.z )) 38 | 39 | file.write("]\n") 40 | file.write("return format(points);\n") 41 | file.write("}\n") 42 | file.write("\n") 43 | file.close() 44 | --------------------------------------------------------------------------------