From 8c4856ebeb0dba9bc715547fa3f3de554e203680 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Wed, 21 Aug 2019 12:03:13 +0200 Subject: [PATCH] Arch: import IFC, move methods used by import and export to helper --- src/Mod/Arch/exportIFC.py | 7 ++--- src/Mod/Arch/importIFC.py | 45 ++++----------------------------- src/Mod/Arch/importIFCHelper.py | 44 ++++++++++++++++++++++++++++++-- 3 files changed, 51 insertions(+), 45 deletions(-) diff --git a/src/Mod/Arch/exportIFC.py b/src/Mod/Arch/exportIFC.py index 199f616d35..845cf37a6b 100644 --- a/src/Mod/Arch/exportIFC.py +++ b/src/Mod/Arch/exportIFC.py @@ -39,11 +39,12 @@ import Draft import Arch import DraftVecUtils import ArchIFCSchema -from DraftGeomUtils import vec -from importIFC import dd2dms -from importIFC import decode import exportIFCHelper +from DraftGeomUtils import vec +from importIFCHelper import dd2dms +from importIFCHelper import decode + ## @package exportIFC # \ingroup ARCH diff --git a/src/Mod/Arch/importIFC.py b/src/Mod/Arch/importIFC.py index c3ab0e3bff..193bd4be2b 100644 --- a/src/Mod/Arch/importIFC.py +++ b/src/Mod/Arch/importIFC.py @@ -30,7 +30,6 @@ __url__ = "http://www.freecadweb.org" import six import os import math -import sys import FreeCAD import Part @@ -139,41 +138,7 @@ structuralifcobjects = ( # ************************************************************************************************ -# ********** some helper, used in import and export - -def decode(filename,utf=False): - - "turns unicodes into strings" - - if six.PY2 and isinstance(filename,six.text_type): - # workaround since ifcopenshell currently can't handle unicode filenames - encoding = "utf8" if utf else sys.getfilesystemencoding() - filename = filename.encode(encoding) - return filename - - -def dd2dms(dd): - - "converts decimal degrees to degrees,minutes,seconds" - - dd = abs(dd) - minutes,seconds = divmod(dd*3600,60) - degrees,minutes = divmod(minutes,60) - if dd < 0: - degrees = -degrees - return (int(degrees),int(minutes),int(seconds)) - - -def dms2dd(degrees, minutes, seconds, milliseconds=0): - - "converts degrees,minutes,seconds to decimal degrees" - - dd = float(degrees) + float(minutes)/60 + float(seconds)/(3600) - return dd - - -# ************************************************************************************************ -# ********** duplicate methods **************** +# ********** duplicate methods, they are in importIFC and exportIFC **************** # TODO get rid of this duplicate def getPreferences(): @@ -225,7 +190,7 @@ def open(filename,skip=[],only=[],root=None): "opens an IFC file in a new document" docname = os.path.splitext(os.path.basename(filename))[0] - docname = decode(docname,utf=True) + docname = importIFCHelper.decode(docname,utf=True) doc = FreeCAD.newDocument(docname) doc.Label = docname doc = insert(filename,doc.Name,skip,only,root) @@ -265,7 +230,7 @@ def insert(filename,docname,skip=[],only=[],root=None): # keeping global variable for debugging purposes # global ifcfile - filename = decode(filename,utf=True) + filename = importIFCHelper.decode(filename,utf=True) ifcfile = ifcopenshell.open(filename) # get file scale @@ -823,9 +788,9 @@ def insert(filename,docname,skip=[],only=[],root=None): if product.RefElevation: obj.Elevation = product.RefElevation * ifcscale if product.RefLatitude: - obj.Latitude = dms2dd(*product.RefLatitude) + obj.Latitude = importIFCHelper.dms2dd(*product.RefLatitude) if product.RefLongitude: - obj.Longitude = dms2dd(*product.RefLongitude) + obj.Longitude = importIFCHelper.dms2dd(*product.RefLongitude) if product.SiteAddress: if product.SiteAddress.AddressLines: obj.Address = product.SiteAddress.AddressLines[0] diff --git a/src/Mod/Arch/importIFCHelper.py b/src/Mod/Arch/importIFCHelper.py index c9e99f7542..62fdd2958f 100644 --- a/src/Mod/Arch/importIFCHelper.py +++ b/src/Mod/Arch/importIFCHelper.py @@ -1,10 +1,50 @@ +import six +import sys +import math + import FreeCAD import Arch import ArchIFC -import math -import six +# ************************************************************************************************ +# ********** some helper, used in import and export, or should stay together + +def decode(filename,utf=False): + + "turns unicodes into strings" + + if six.PY2 and isinstance(filename,six.text_type): + # workaround since ifcopenshell currently can't handle unicode filenames + encoding = "utf8" if utf else sys.getfilesystemencoding() + filename = filename.encode(encoding) + return filename + + +# used in export +def dd2dms(dd): + + "converts decimal degrees to degrees,minutes,seconds" + + dd = abs(dd) + minutes,seconds = divmod(dd*3600,60) + degrees,minutes = divmod(minutes,60) + if dd < 0: + degrees = -degrees + return (int(degrees),int(minutes),int(seconds)) + + +# used in import +def dms2dd(degrees, minutes, seconds, milliseconds=0): + + "converts degrees,minutes,seconds to decimal degrees" + + dd = float(degrees) + float(minutes)/60 + float(seconds)/(3600) + return dd + + +# ************************************************************************************************ +# ********** some helper, mainly used in import class ProjectImporter: """A helper class to create a FreeCAD Arch Project object"""