From 97663851ec4889708df770a537a0221b7dae95a4 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 16 Apr 2014 10:56:46 -0300 Subject: [PATCH] Arch: Fixed in IFC import --- src/Mod/Arch/ArchCommands.py | 14 ++++++++++---- src/Mod/Arch/importIFC.py | 19 ++++++++++++++----- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 2be5964536ba..b936cba23661 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -602,8 +602,8 @@ def addFixture(fixture,baseobject): else: FreeCAD.Console.PrintMessage(translate("Arch","This object has no support for fixtures")) -def getTuples(data,scale=1,placement=None): - """getTuples(data,[scale,placement]): returns a tuple or a list of tuples from a vector +def getTuples(data,scale=1,placement=None,normal=None): + """getTuples(data,[scale,placement,normal]): returns a tuple or a list of tuples from a vector or from the vertices of a shape. Scale can indicate a scale factor""" import Part if isinstance(data,FreeCAD.Vector): @@ -616,7 +616,12 @@ def getTuples(data,scale=1,placement=None): import Part,DraftGeomUtils data = Part.Wire(DraftGeomUtils.sortEdges(data.Wires[0].Edges)) verts = data.Vertexes - #verts.reverse() + try: + if DraftVecUtils.angle(verts[1].Point,verts[0].Point,normal) >= 0: + # inverting verts order if the direction is couterclockwise + verts.reverse() + except: + pass for v in verts: pt = v.Point if placement: @@ -662,7 +667,8 @@ def getBrepFacesData(obj,scale=1): for face in obj.Shape.Faces: f = [] for wire in face.Wires: - f.append(getTuples(wire,scale)) + t = getTuples(wire,scale,normal=face.normalAt(0,0)) + f.append(t) s.append(f) sols.append(s) return sols diff --git a/src/Mod/Arch/importIFC.py b/src/Mod/Arch/importIFC.py index 7c4b78ae323e..30318501df1e 100644 --- a/src/Mod/Arch/importIFC.py +++ b/src/Mod/Arch/importIFC.py @@ -927,24 +927,33 @@ def export(exportList,filename): # process objects for obj in objectslist: - if DEBUG: print "adding ",obj.Label otype = Draft.getType(obj) name = str(obj.Label) parent = Arch.getHost(obj) gdata = None + + if otype in ["Group"]: + # unsupported objects. TODO: support + continue + + if DEBUG: print "adding ",obj.Label + if not forcebrep: gdata = Arch.getExtrusionData(obj,scaling) - if DEBUG: print "extrusion data for ",obj.Label," : ",gdata + #if DEBUG: print "extrusion data for ",obj.Label," : ",gdata if not gdata: fdata = Arch.getBrepFacesData(obj,scaling) - if DEBUG: print "brep data for ",obj.Label," : ",fdata + #if DEBUG: print "brep data for ",obj.Label," : ",fdata + if DEBUG: print " Brep" if not fdata: if obj.isDerivedFrom("Part::Feature"): print "IFC export: error retrieving the shape of object ", obj.Name continue + else: + if DEBUG: print " Extrusion" spacer = "" - for i in range(30-len(obj.Name)): + for i in range(36-len(obj.Label)): spacer += " " if otype in ["Structure","Window"]: if hasattr(obj,"Role"): @@ -953,7 +962,7 @@ def export(exportList,filename): tp = otype else: tp = otype - txt.append(obj.Name + spacer + tp) + txt.append(obj.Label + spacer + tp) if otype == "Building": ifc.addBuilding( name=name )