First implementation of 3mf reader

This commit is contained in:
Jaime van Kessel 2015-08-10 16:38:46 +02:00
parent 0962fdddf1
commit f2a4091304
2 changed files with 74 additions and 0 deletions

View file

@ -0,0 +1,49 @@
# 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)