0001047: Collada export
This commit is contained in:
parent
df57e63b61
commit
1b016c4469
|
@ -103,6 +103,7 @@ def export(exportList,filename):
|
||||||
"called when freecad exports a file"
|
"called when freecad exports a file"
|
||||||
if not checkCollada(): return
|
if not checkCollada(): return
|
||||||
colmesh = collada.Collada()
|
colmesh = collada.Collada()
|
||||||
|
colmesh.assetInfo.upaxis = collada.asset.UP_AXIS.Z_UP
|
||||||
effect = collada.material.Effect("effect0", [], "phong", diffuse=(.7,.7,.7), specular=(1,1,1))
|
effect = collada.material.Effect("effect0", [], "phong", diffuse=(.7,.7,.7), specular=(1,1,1))
|
||||||
mat = collada.material.Material("material0", "mymaterial", effect)
|
mat = collada.material.Material("material0", "mymaterial", effect)
|
||||||
colmesh.effects.append(effect)
|
colmesh.effects.append(effect)
|
||||||
|
@ -110,7 +111,25 @@ def export(exportList,filename):
|
||||||
objind = 0
|
objind = 0
|
||||||
scenenodes = []
|
scenenodes = []
|
||||||
for obj in exportList:
|
for obj in exportList:
|
||||||
if obj.isDerivedFrom("Mesh::Feature"):
|
if obj.isDerivedFrom("Part::Feature"):
|
||||||
|
print "exporting object ",obj.Name, obj.Shape
|
||||||
|
m = obj.Shape.tessellate(1)
|
||||||
|
vindex = []
|
||||||
|
nindex = []
|
||||||
|
findex = []
|
||||||
|
# vertex indices
|
||||||
|
for v in m[0]:
|
||||||
|
vindex.extend([v.x,v.y,v.z])
|
||||||
|
# normals
|
||||||
|
for f in obj.Shape.Faces:
|
||||||
|
n = f.normalAt(0,0)
|
||||||
|
for i in range(len(f.tessellate(1)[1])):
|
||||||
|
nindex.extend([n.x,n.y,n.z])
|
||||||
|
# face indices
|
||||||
|
for i in range(len(m[1])):
|
||||||
|
f = m[1][i]
|
||||||
|
findex.extend([f[0],i,f[1],i,f[2],i])
|
||||||
|
elif obj.isDerivedFrom("Mesh::Feature"):
|
||||||
print "exporting object ",obj.Name, obj.Mesh
|
print "exporting object ",obj.Name, obj.Mesh
|
||||||
m = obj.Mesh
|
m = obj.Mesh
|
||||||
vindex = []
|
vindex = []
|
||||||
|
@ -127,26 +146,23 @@ def export(exportList,filename):
|
||||||
for i in range(len(m.Topology[1])):
|
for i in range(len(m.Topology[1])):
|
||||||
f = m.Topology[1][i]
|
f = m.Topology[1][i]
|
||||||
findex.extend([f[0],i,f[1],i,f[2],i])
|
findex.extend([f[0],i,f[1],i,f[2],i])
|
||||||
print len(vindex), " vert indices, ", len(nindex), " norm indices, ", len(findex), " face indices."
|
print len(vindex), " vert indices, ", len(nindex), " norm indices, ", len(findex), " face indices."
|
||||||
vert_src = collada.source.FloatSource("cubeverts-array"+str(objind), numpy.array(vindex), ('X', 'Y', 'Z'))
|
vert_src = collada.source.FloatSource("cubeverts-array"+str(objind), numpy.array(vindex), ('X', 'Y', 'Z'))
|
||||||
normal_src = collada.source.FloatSource("cubenormals-array"+str(objind), numpy.array(nindex), ('X', 'Y', 'Z'))
|
normal_src = collada.source.FloatSource("cubenormals-array"+str(objind), numpy.array(nindex), ('X', 'Y', 'Z'))
|
||||||
geom = collada.geometry.Geometry(colmesh, "geometry"+str(objind), obj.Name, [vert_src, normal_src])
|
geom = collada.geometry.Geometry(colmesh, "geometry"+str(objind), obj.Name, [vert_src, normal_src])
|
||||||
input_list = collada.source.InputList()
|
input_list = collada.source.InputList()
|
||||||
input_list.addInput(0, 'VERTEX', "#cubeverts-array"+str(objind))
|
input_list.addInput(0, 'VERTEX', "#cubeverts-array"+str(objind))
|
||||||
input_list.addInput(1, 'NORMAL', "#cubenormals-array"+str(objind))
|
input_list.addInput(1, 'NORMAL', "#cubenormals-array"+str(objind))
|
||||||
triset = geom.createTriangleSet(numpy.array(findex), input_list, "materialref")
|
triset = geom.createTriangleSet(numpy.array(findex), input_list, "materialref")
|
||||||
geom.primitives.append(triset)
|
geom.primitives.append(triset)
|
||||||
colmesh.geometries.append(geom)
|
colmesh.geometries.append(geom)
|
||||||
matnode = collada.scene.MaterialNode("materialref", mat, inputs=[])
|
matnode = collada.scene.MaterialNode("materialref", mat, inputs=[])
|
||||||
geomnode = collada.scene.GeometryNode(geom, [matnode])
|
geomnode = collada.scene.GeometryNode(geom, [matnode])
|
||||||
node = collada.scene.Node("node"+str(objind), children=[geomnode])
|
node = collada.scene.Node("node"+str(objind), children=[geomnode])
|
||||||
scenenodes.append(node)
|
scenenodes.append(node)
|
||||||
objind += 1
|
objind += 1
|
||||||
myscene = collada.scene.Scene("myscene", scenenodes)
|
myscene = collada.scene.Scene("myscene", scenenodes)
|
||||||
colmesh.scenes.append(myscene)
|
colmesh.scenes.append(myscene)
|
||||||
colmesh.scene = myscene
|
colmesh.scene = myscene
|
||||||
myscene = collada.scene.Scene("myscene", [node])
|
|
||||||
colmesh.scenes.append(myscene)
|
|
||||||
colmesh.scene = myscene
|
|
||||||
colmesh.write(filename)
|
colmesh.write(filename)
|
||||||
FreeCAD.Console.PrintMessage(str(translate("Arch","file %s successfully created.")) % filename)
|
FreeCAD.Console.PrintMessage(str(translate("Arch","file %s successfully created.")) % filename)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user