diff --git a/src/Mod/OpenSCAD/OpenSCADCommands.py b/src/Mod/OpenSCAD/OpenSCADCommands.py index afb4d7f850..d5d744a910 100644 --- a/src/Mod/OpenSCAD/OpenSCADCommands.py +++ b/src/Mod/OpenSCAD/OpenSCADCommands.py @@ -168,16 +168,24 @@ class MirrorMeshFeature: newobj=selobj.Document.addObject("Mesh::Feature",'mirror') newobj.Label='mirror_%s' % selobj.Object.Label msh=selobj.Object.Mesh - newmesh=OpenSCADUtils.mirror(msh) - if not newmesh: - selobj.Document.removeObject(newobj.Name) - else: + items=["[1,0,0]","[0,1,0]","[0,0,1]","[1,1,0]","[0,1,1]","[1,0,1]","[1,1,1]"] + item, ok = QtGui.QInputDialog.getItem(QtGui.QApplication.activeWindow(),u'Mirror about which Axis?',u'Select Axis (or enter custom value)?',items,editable=True) + if ok: + splits = list(item) + x = float(splits[1]) + y = float(splits[3]) + z = float(splits[5]) + vec = FreeCAD.Base.Vector(x,y,z) + newmesh=OpenSCADUtils.mirror(msh, vec) newobj.Mesh=newmesh selobj.Object.ViewObject.hide() + else: + selobj.Document.removeObject(newobj.Name) + FreeCAD.ActiveDocument.recompute() def GetResources(self): return {'Pixmap' : 'OpenSCAD_MirrorMeshFeature', - 'MenuText': QtCore.QT_TRANSLATE_NOOP('OpenSCAD_MirrorMeshFeature', 'Mirror Mesh Feature'), + 'MenuText': QtCore.QT_TRANSLATE_NOOP('OpenSCAD_MirrorMeshFeature', 'Mirror Mesh Feature...'), 'ToolTip' : QtCore.QT_TRANSLATE_NOOP('OpenSCAD_MirrorMeshFeature', 'Create Mirror Mesh Feature')} diff --git a/src/Mod/OpenSCAD/OpenSCADUtils.py b/src/Mod/OpenSCAD/OpenSCADUtils.py index 080a6b52e0..5c052f1bd4 100644 --- a/src/Mod/OpenSCAD/OpenSCADUtils.py +++ b/src/Mod/OpenSCAD/OpenSCADUtils.py @@ -298,18 +298,15 @@ def vec2householder(nv): nv.z*nv.x*l,nv.z*nv.y*l,nv.z*nv.z*l,0,0,0,0,0) return FreeCAD.Matrix()-hh -def mirror(msh): +def mirror(msh,vec): from exportCSG import mesh2polyhedron from PySide import QtGui - items=["[1,0,0]","[0,1,0]","[0,0,1]","[1,1,0]","[0,1,1]","[1,0,1]","[1,1,1]"] - item, ok = QtGui.QInputDialog.getItem(QtGui.QApplication.activeWindow(),u'Mirror about which Axis?',u'Select Axis (or enter custom value)?',items,editable=True) - if ok: - param = 'mirror('+item+')' - poly = mesh2polyhedron(msh) - mi = callopenscadmeshstring('%s{%s}' % (param,''.join(poly))) - mi.flipNormals() - return mi - return None + poly = mesh2polyhedron(msh) + vec_string = '['+str(vec.x)+','+str(vec.y)+','+str(vec.z)+']' + param = 'mirror('+vec_string+')' + mi = callopenscadmeshstring('%s{%s}' % (param,''.join(poly))) + mi.flipNormals() + return mi def angneg(d):