Cura/plugins/3MFReader/ThreeMFReader.py
2015-08-10 16:38:46 +02:00

49 lines
1.9 KiB
Python

# Copyright (c) 2015 Ultimaker B.V.
# Cura is released under the terms of the AGPLv3 or higher.
from UM.Mesh.MeshReader import MeshReader
from UM.Mesh.MeshData import MeshData
from UM.Logger import Logger
from UM.Math.Matrix import Matrix
from UM.Math.Vector import Vector
import os
import struct
import math
from os import listdir
import untangle
import zipfile
class ThreeMFReader(MeshReader):
def __init__(self):
super(ThreeMFReader, self).__init__()
self._supported_extension = ".3mf"
def read(self, file_name):
extension = os.path.splitext(file_name)[1]
if extension.lower() == self._supported_extension:
mesh = MeshData()
archive = zipfile.ZipFile(file_name, 'r')
#print(archive.read("3D/3dmodel.model"))
try:
object = untangle.parse(archive.read("3D/3dmodel.model").decode("utf-8"))
for object in object.model.resources.object:
vertex_list = []
for vertex in object.mesh.vertices.vertex:
vertex_list.append([vertex['x'],vertex['y'],vertex['z']])
mesh.reserveFaceCount(len(object.mesh.triangles.triangle))
for triangle in object.mesh.triangles.triangle:
v1 = int(triangle["v1"])
v2 = int(triangle["v2"])
v3 = int(triangle["v3"])
mesh.addFace(vertex_list[v1][0],vertex_list[v1][1],vertex_list[v1][2],vertex_list[v2][0],vertex_list[v2][1],vertex_list[v2][2],vertex_list[v3][0],vertex_list[v3][1],vertex_list[v3][2])
#if not mesh.hasNormals():
mesh.calculateNormals()
return mesh
#object.mesh.vertices
#object.mesh.triangles
except Exception as e:
print(e)