From 195b8e1b355e13a7587e1581d955354d8acc1940 Mon Sep 17 00:00:00 2001 From: Sebastian Hoogen Date: Tue, 22 Oct 2013 07:15:05 +0200 Subject: [PATCH 1/3] OpenSCAD encode text as utf8 --- src/Mod/OpenSCAD/OpenSCADCommands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/OpenSCAD/OpenSCADCommands.py b/src/Mod/OpenSCAD/OpenSCADCommands.py index 778e310a7229..5b8edd434d89 100644 --- a/src/Mod/OpenSCAD/OpenSCADCommands.py +++ b/src/Mod/OpenSCAD/OpenSCADCommands.py @@ -211,7 +211,7 @@ def isAllowedAlterDocument(self): return True def addelement(self): - scadstr=unicode(self.form.textEdit.toPlainText()) + scadstr=unicode(self.form.textEdit.toPlainText()).encode('utf8') asmesh=self.form.checkboxmesh.checkState() import OpenSCADUtils, os extension= 'stl' if asmesh else 'csg' From fb488168174a98081e3c736bb345e08c3b7ae6f0 Mon Sep 17 00:00:00 2001 From: Sebastian Hoogen Date: Tue, 22 Oct 2013 16:32:36 +0200 Subject: [PATCH 2/3] use a python feature for unsupported operations --- src/Mod/OpenSCAD/OpenSCADFeatures.py | 16 ++++++++++++++++ src/Mod/OpenSCAD/importCSG.py | 24 ++++++++++++++++++++---- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/Mod/OpenSCAD/OpenSCADFeatures.py b/src/Mod/OpenSCAD/OpenSCADFeatures.py index 44fcd54163e8..ec71a1425023 100644 --- a/src/Mod/OpenSCAD/OpenSCADFeatures.py +++ b/src/Mod/OpenSCAD/OpenSCADFeatures.py @@ -75,6 +75,9 @@ def claimChildren(self): objs.extend(self.Object.Objects) if hasattr(self.Object,"Components"): objs.extend(self.Object.Components) + if hasattr(self.Object,"Children"): + objs.extend(self.Object.Children) + return objs def getIcon(self): @@ -215,6 +218,19 @@ def getIcon(self): "4444444444444444"}; """ +class OpenSCADPlaceholder: + def __init__(self,obj,children=None,arguments=None): + obj.addProperty("App::PropertyLinkList",'Children','OpenSCAD',"Base Objects") + obj.addProperty("App::PropertyString",'Arguments','OpenSCAD',"Arguments") + obj.Proxy = self + if children: + obj.Children = children + if arguments: + obj.Arguments = arguments + + def execute(self,fp): + import Part + fp.Shape = Part.Compound([]) #empty Shape class MatrixTransform: def __init__(self, obj,matrix=None,child=None): diff --git a/src/Mod/OpenSCAD/importCSG.py b/src/Mod/OpenSCAD/importCSG.py index 8b973ac4c586..c08d5aeffd79 100644 --- a/src/Mod/OpenSCAD/importCSG.py +++ b/src/Mod/OpenSCAD/importCSG.py @@ -341,16 +341,32 @@ def p_operation(p): | projection_action ''' p[0] = p[1] - + + def p_not_supported(p): ''' - not_supported : hull LPAREN RPAREN OBRACE block_list EBRACE + not_supported : hull LPAREN keywordargument_list RPAREN OBRACE block_list EBRACE | minkowski LPAREN keywordargument_list RPAREN OBRACE block_list EBRACE - | glide LPAREN RPAREN OBRACE block_list EBRACE + | glide LPAREN keywordargument_list RPAREN OBRACE block_list EBRACE ''' - if gui: + if gui and not FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/OpenSCAD").\ + GetBool('usePlaceholderForUnsupported'): from PyQt4 import QtGui QtGui.QMessageBox.critical(None, unicode(translate('OpenSCAD',"Unsupported Function"))+" : "+p[1],unicode(translate('OpenSCAD',"Press OK"))) + else: + from OpenSCADFeatures import OpenSCADPlaceholder + newobj=doc.addObject("Part::FeaturePython",p[1]) + OpenSCADPlaceholder(newobj,p[6],str(p[3])) + if gui: + if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/OpenSCAD").\ + GetBool('useViewProviderTree'): + from OpenSCADFeatures import ViewProviderTree + ViewProviderTree(newobj.ViewObject) + else: + newobj.ViewObject.Proxy = 0 + #don't hide the children + p[0] = [newobj] + def p_size_vector(p): 'size_vector : OSQUARE NUMBER COMMA NUMBER COMMA NUMBER ESQUARE' From e59e5e5be40e9c7ebae7155bf819f280e405e9de Mon Sep 17 00:00:00 2001 From: Sebastian Hoogen Date: Mon, 28 Oct 2013 06:36:27 +0100 Subject: [PATCH 3/3] bugfix in OpenSCADUtils.callopenscad() it did not return any result if outputfilename was given reported by Keith Sloan --- src/Mod/OpenSCAD/OpenSCADUtils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Mod/OpenSCAD/OpenSCADUtils.py b/src/Mod/OpenSCAD/OpenSCADUtils.py index e395b56207d2..7c1437e95902 100644 --- a/src/Mod/OpenSCAD/OpenSCADUtils.py +++ b/src/Mod/OpenSCAD/OpenSCADUtils.py @@ -109,9 +109,9 @@ def check_output2(*args,**kwargs): else: outputfilename=os.path.join(dir1,'output-%d.%s' % \ (int(time.time()*100) % 1000000,outputext)) - check_output2([osfilename,'-o',outputfilename, inputfilename],\ - stderr=subprocess.STDOUT) - return outputfilename + check_output2([osfilename,'-o',outputfilename, inputfilename],\ + stderr=subprocess.STDOUT) + return outputfilename def callopenscadstring(scadstr,outputext='csg'): '''create a tempfile and call the open scad binary