Resolved issue: Exporting rectangular section to ifc

This commit is contained in:
marvellouschandan
2018-11-02 01:03:14 +05:30
committed by Yorik van Havre
parent 90a1f4ad1c
commit 2765ed4792

View File

@@ -28,6 +28,7 @@ __author__ = "Yorik van Havre","Jonathan Wiedemann"
__url__ = "http://www.freecadweb.org"
import os,time,tempfile,uuid,FreeCAD,Part,Draft,Arch,math,DraftVecUtils
from DraftGeomUtils import vec
## @package importIFC
# \ingroup ARCH
@@ -2381,6 +2382,24 @@ def createCurve(ifcfile,wire):
pol = ifcfile.createIfcCompositeCurve(segments,False)
return pol
def getEdgesAngle(edge1, edge2):
""" getEdgesAngle(edge1, edge2): returns a angle between two edges."""
vec1 = vec(edge1)
vec2 = vec(edge2)
angle = vec1.getAngle(vec2)
angle = math.degrees(angle)
return angle
def checkRectangle(edges):
""" checkRectangle(edges=[]): This function checks whether the given form rectangle
or not. It will return True when edges form rectangular shape or return False
when edges not form a rectangular."""
angles = [round(getEdgesAngle(edges[0], edges[1])), round(getEdgesAngle(edges[0], edges[2])),
round(getEdgesAngle(edges[0], edges[3]))]
if angles.count(90) == 2 and (angles.count(180) == 1 or angles.count(0) == 1):
return True
else:
return False
def getProfile(ifcfile,p):
@@ -2398,6 +2417,15 @@ def getProfile(ifcfile,p):
elif isinstance(p.Edges[0].Curve,Part.Ellipse):
# extruded ellipse
profile = ifcfile.createIfcEllipseProfileDef("AREA",None,pt,p.Edges[0].Curve.MajorRadius,p.Edges[0].Curve.MinorRadius)
elif (checkRectangle(p.Edges)):
pxvc = ifcbin.createIfcDirection((1.0,0.0))
povc = ifcbin.createIfcCartesianPoint((0.0,0.0))
pt = ifcbin.createIfcAxis2Placement2D(povc,pxvc)
semiPerimeter = p.Length / 2;
diff = math.sqrt(semiPerimeter**2 - 4*p.Area)
b = max(abs((semiPerimeter + diff)/2),abs((semiPerimeter - diff)/2))
h = min(abs((semiPerimeter + diff)/2),abs((semiPerimeter - diff)/2))
profile = ifcfile.createIfcRectangleProfileDef("AREA",'rectangular',pt,b,h)
elif (len(p.Faces) == 1) and (len(p.Wires) > 1):
# face with holes
f = p.Faces[0]