From f7fcf9bd58436c292fafa42481a7a0624d1c9358 Mon Sep 17 00:00:00 2001 From: Simon Huskier Date: Fri, 27 Nov 2015 17:08:13 +0800 Subject: [PATCH 1/5] Add URL file import into importStep function, but FreeCAD has a bug for urllib.open() function......, not work properly.... --- cadquery/freecad_impl/importers.py | 31 ++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/cadquery/freecad_impl/importers.py b/cadquery/freecad_impl/importers.py index 80458be..cd0d25d 100644 --- a/cadquery/freecad_impl/importers.py +++ b/cadquery/freecad_impl/importers.py @@ -25,6 +25,24 @@ from .shapes import Shape import FreeCAD import Part +import sys + +if sys.version > '3': + PY3 = True + import urllib.request as urlreader + import urllib.parse as urlparse +else: + PY3 = False + import urllib as urlreader + import urlparse + +def isURL(filename): + schemeSpecifier = urlparse.urlparse(filename).scheme + if schemeSpecifier == 'http' or schemeSpecifier == 'https' or schemeSpecifier == 'ftp': + return True + else: + return False + class ImportTypes: STEP = "STEP" @@ -52,6 +70,19 @@ def importStep(fileName): :param fileName: The path and name of the STEP file to be imported """ + if isURL(fileName): + url = fileName + webFile = urlreader.urlopen(url) + localFileName = url.split('/')[-1] + localFile = open(localFileName, 'w') + if PY3: + localFile.write(webFile.read().decode('utf-8')) + else: + localFile.write(webFile.read()) + webFile.close() + localFile.close() + fileName = localFileName + #Now read and return the shape try: rshape = Part.read(fileName) From 10209482b77ac71c0fccdb42e98f6081712b5be1 Mon Sep 17 00:00:00 2001 From: Youbao Zhang Date: Mon, 30 Nov 2015 23:00:21 +0000 Subject: [PATCH 2/5] Add a new function importStepFromURL(url) to import STEP file from the web... --- cadquery/freecad_impl/importers.py | 52 ++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/cadquery/freecad_impl/importers.py b/cadquery/freecad_impl/importers.py index cd0d25d..8c5106b 100644 --- a/cadquery/freecad_impl/importers.py +++ b/cadquery/freecad_impl/importers.py @@ -24,8 +24,9 @@ from .shapes import Shape import FreeCAD import Part - import sys +import os +import platform if sys.version > '3': PY3 = True @@ -68,24 +69,11 @@ def importStep(fileName): """ Accepts a file name and loads the STEP file into a cadquery shape :param fileName: The path and name of the STEP file to be imported - """ - - if isURL(fileName): - url = fileName - webFile = urlreader.urlopen(url) - localFileName = url.split('/')[-1] - localFile = open(localFileName, 'w') - if PY3: - localFile.write(webFile.read().decode('utf-8')) - else: - localFile.write(webFile.read()) - webFile.close() - localFile.close() - fileName = localFileName - + """ #Now read and return the shape try: - rshape = Part.read(fileName) + #print fileName + rshape = Part.read(fileName) #Make sure that we extract all the solids solids = [] @@ -95,3 +83,33 @@ def importStep(fileName): return cadquery.Workplane("XY").newObject(solids) except: raise ValueError("STEP File Could not be loaded") + +#Loads a STEP file from an URL into a CQ.Workplane object +def importStepFromURL(url): + #Now read and return the shape + try: + webFile = urlreader.urlopen(url) + if webFile.getcode + if platform.system() == 'Windows': + localFileName = os.environ['TEMP']+url.split('/')[-1] + else: + localFileName = "/tmp/"+url.split('/')[-1] + localFile = open(localFileName, 'w') + if PY3: + localFile.write(webFile.read().decode('utf-8')) + else: + localFile.write(webFile.read()) + webFile.close() + localFile.close() + fileName = localFileName + + rshape = Part.read(fileName) + + #Make sure that we extract all the solids + solids = [] + for solid in rshape.Solids: + solids.append(Shape.cast(solid)) + + return cadquery.Workplane("XY").newObject(solids) + except: + raise ValueError("STEP File from the URL: " + url + " Could not be loaded") From e0832ec3eb608fbaf4f126be25c312b8a5c09cc8 Mon Sep 17 00:00:00 2001 From: Youbao Zhang Date: Mon, 30 Nov 2015 23:17:03 +0000 Subject: [PATCH 3/5] Delete IsURL(url) function... --- cadquery/freecad_impl/importers.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/cadquery/freecad_impl/importers.py b/cadquery/freecad_impl/importers.py index 8c5106b..1d8ea48 100644 --- a/cadquery/freecad_impl/importers.py +++ b/cadquery/freecad_impl/importers.py @@ -31,19 +31,10 @@ import platform if sys.version > '3': PY3 = True import urllib.request as urlreader - import urllib.parse as urlparse else: PY3 = False import urllib as urlreader - import urlparse -def isURL(filename): - schemeSpecifier = urlparse.urlparse(filename).scheme - if schemeSpecifier == 'http' or schemeSpecifier == 'https' or schemeSpecifier == 'ftp': - return True - else: - return False - class ImportTypes: STEP = "STEP" From 51a8d356455190348e4de1eb4d97b97de7d5e847 Mon Sep 17 00:00:00 2001 From: Simon Huskier Date: Tue, 1 Dec 2015 08:50:33 +0800 Subject: [PATCH 4/5] Small fixes for importStepFromURL(url) function... --- cadquery/freecad_impl/importers.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cadquery/freecad_impl/importers.py b/cadquery/freecad_impl/importers.py index 1d8ea48..fdecf9f 100644 --- a/cadquery/freecad_impl/importers.py +++ b/cadquery/freecad_impl/importers.py @@ -80,9 +80,8 @@ def importStepFromURL(url): #Now read and return the shape try: webFile = urlreader.urlopen(url) - if webFile.getcode if platform.system() == 'Windows': - localFileName = os.environ['TEMP']+url.split('/')[-1] + localFileName = os.environ['TEMP']+'/'+url.split('/')[-1] else: localFileName = "/tmp/"+url.split('/')[-1] localFile = open(localFileName, 'w') From f94f9fe115748d4b880ad0e023bd1b9a0218eda3 Mon Sep 17 00:00:00 2001 From: Simon Huskier Date: Wed, 2 Dec 2015 11:37:28 +0800 Subject: [PATCH 5/5] 1. remove PY3 check; 2. replace the home-made local-file-way with tempfile module from the python std library; 3. NOTE: the suffix parameter in the tempfile.NamedTemporaryFile() function is a must, since Part.read need the suffix parameter...... --- cadquery/freecad_impl/importers.py | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/cadquery/freecad_impl/importers.py b/cadquery/freecad_impl/importers.py index fdecf9f..ce08ea3 100644 --- a/cadquery/freecad_impl/importers.py +++ b/cadquery/freecad_impl/importers.py @@ -26,15 +26,9 @@ import FreeCAD import Part import sys import os -import platform - -if sys.version > '3': - PY3 = True - import urllib.request as urlreader -else: - PY3 = False - import urllib as urlreader - +import urllib as urlreader +import tempfile + class ImportTypes: STEP = "STEP" @@ -80,20 +74,12 @@ def importStepFromURL(url): #Now read and return the shape try: webFile = urlreader.urlopen(url) - if platform.system() == 'Windows': - localFileName = os.environ['TEMP']+'/'+url.split('/')[-1] - else: - localFileName = "/tmp/"+url.split('/')[-1] - localFile = open(localFileName, 'w') - if PY3: - localFile.write(webFile.read().decode('utf-8')) - else: - localFile.write(webFile.read()) + tempFile = tempfile.NamedTemporaryFile(suffix='.step', delete=False) + tempFile.write(webFile.read()) webFile.close() - localFile.close() - fileName = localFileName - - rshape = Part.read(fileName) + tempFile.close() + + rshape = Part.read(tempFile.name) #Make sure that we extract all the solids solids = []