import bpy
import json
def separateCollection(collection):
result = {
"name":collection.name,
"subCollections":[separateCollection(subCollection) for subCollection in collection.children],
"objects":[separateObject(object) for object in collection.objects]
}
return result
def separateObject(object):
materialNameList = [material.name for material in object.material_slots]
result = {
"name":object.name,
"position":vec3ToList(object.delta_location),
"rotation":vec3ToList(object.delta_rotation_euler),
"scale":vec3ToList(object.delta_scale),
"points":[vec3ToList(vertex.co) for vertex in object.to_mesh().vertices],
"faceList":[[vertex for vertex in polygon.vertices] for polygon in object.to_mesh().polygons],
"uvPointsList":[vec2ToList(item.uv) for item in object.to_mesh().uv_layers[0].data],
"textureList":[materialNameList[polygon.material_index] for polygon in object.to_mesh().polygons]
}
return result
def vec3ToList(vec):
return[vec[0], vec[1], vec[2]]
def vec2ToList(vec):
return[vec[0], vec[1]]
jsonCollections = {
"collections":{},
}
jsonTextures = {
"textures":{},
}
MainCollection = 0
collections = bpy.data.collections
for collection in collections:
if collection.name == "MainCollection":
MainCollection = collection
break
jsonCollections["collections"] = [separateCollection(MainCollection)]
jsonTextures["textures"] = [{
"name":material.name,
"type":"solid",
"color":
f'{(int)(255*material.diffuse_color[0]):02x}'+
f'{(int)(255*material.diffuse_color[1]):02x}'+
f'{(int)(255*material.diffuse_color[2]):02x}', #[material.diffuse_color[0], material.diffuse_color[1], material.diffuse_color[2], material.diffuse_color[3]],
"imgPath":"/"
}
for material in bpy.data.materials]
file = open("/home/cory/IdeaProjects/testing/jsonCollections.json", "w")
file.write(json.dumps(jsonCollections))
file.close()
file = open("/home/cory/IdeaProjects/testing/jsonTextures.json", "w")
file.write(json.dumps(jsonTextures))
file.close()