further work on ifcopenshell integration
This commit is contained in:
@@ -36,7 +36,12 @@ def open(filename):
|
||||
doc = FreeCAD.newDocument(docname)
|
||||
doc.Label = decode(docname)
|
||||
FreeCAD.ActiveDocument = doc
|
||||
read(filename)
|
||||
p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch")
|
||||
p = p.GetBool("useIfcOpenShell")
|
||||
if p:
|
||||
readOpenShell(filename)
|
||||
else:
|
||||
read(filename)
|
||||
return doc
|
||||
|
||||
def decode(name):
|
||||
@@ -78,10 +83,39 @@ def getIfcOpenShell():
|
||||
print "Couldn't import IfcOpenShell"
|
||||
|
||||
def readOpenShell(filename):
|
||||
import Mesh
|
||||
getIfcOpenShell()
|
||||
if IfcOpenShell:
|
||||
IfcOpenShell.Init(filename)
|
||||
return IfcOpenShell.Get()
|
||||
while True:
|
||||
obj = IfcOpenShell.Get()
|
||||
print "parsing ",obj.guid,": ",obj.name," of type ",obj.type
|
||||
meshdata = []
|
||||
n = obj.name
|
||||
if not n: n = "Unnamed"
|
||||
f = obj.mesh.faces
|
||||
v = obj.mesh.verts
|
||||
m = obj.matrix
|
||||
print "verts: ",len(v)," faces: ",len(f)
|
||||
mat = FreeCAD.Matrix(m[0], m[1], m[2], 0,
|
||||
m[3], m[4], m[5], 0,
|
||||
m[6], m[7], m[8], 0,
|
||||
m[9], m[10], m[11], 1)
|
||||
for i in range(0, len(f), 3):
|
||||
print "face ",f[i],f[i+1],f[i+2]
|
||||
face = []
|
||||
print "i:",i
|
||||
for j in range(3):
|
||||
vi = f[i+j]*3
|
||||
print "vi:",vi
|
||||
face.append([v[vi],v[vi+1],v[vi+2]])
|
||||
meshdata.append(face)
|
||||
newmesh = Mesh.Mesh(meshdata)
|
||||
mobj = FreeCAD.ActiveDocument.addObject("Mesh::Feature",n)
|
||||
mobj.Mesh = newmesh
|
||||
mobj.Placement = FreeCAD.Placement(mat)
|
||||
if not IfcOpenShell.Next():
|
||||
break
|
||||
return None
|
||||
|
||||
def read(filename):
|
||||
|
||||
Reference in New Issue
Block a user