Add Load/Save/Refresh to add OpenSCAD Elements

This commit is contained in:
Keith Sloan
2021-04-27 17:42:06 +01:00
parent 8bdf4a7a2b
commit d850ed87aa

View File

@@ -327,7 +327,17 @@ class RemoveSubtree:
class AddSCADWidget(QtGui.QWidget):
def __init__(self,*args):
QtGui.QWidget.__init__(self,*args)
# Main text area
self.textEdit=QtGui.QTextEdit()
self.textEdit.setAcceptRichText(False)
#print(self.textEdit.maximumHeight())
#print(self.textEdit.maximumViewportSize())
# Message Area
self.textMsg=QtGui.QPlainTextEdit()
self.textMsg.setReadOnly(True)
h = int(2.5 * self.textMsg.fontMetrics().height())
self.textMsg.setMaximumHeight(h)
self.textMsg.resize(self.textMsg.width(),h)
self.buttonadd = QtGui.QPushButton(translate('OpenSCAD','Add'))
self.buttonclear = QtGui.QPushButton(translate('OpenSCAD','Clear'))
self.buttonload = QtGui.QPushButton(translate('OpenSCAD','Load'))
@@ -344,6 +354,7 @@ class AddSCADWidget(QtGui.QWidget):
layout.addLayout(layouth)
layout.addWidget(self.checkboxmesh)
layout.addWidget(self.textEdit)
layout.addWidget(self.textMsg)
self.setLayout(layout)
self.setWindowTitle(translate('OpenSCAD','Add OpenSCAD Element'))
self.textEdit.setText(u'cube();')
@@ -351,6 +362,9 @@ class AddSCADWidget(QtGui.QWidget):
def retranslateUi(self, widget=None):
self.buttonadd.setText(translate('OpenSCAD','Add'))
self.buttonload.setText(translate('OpenSCAD','Load'))
self.buttonsave.setText(translate('OpenSCAD','Save'))
self.buttonrefresh.setText(translate('OpenSCAD','Refesh'))
self.buttonclear.setText(translate('OpenSCAD','Clear'))
self.checkboxmesh.setText(translate('OpenSCAD','as Mesh'))
self.setWindowTitle(translate('OpenSCAD','Add OpenSCAD Element'))
@@ -362,6 +376,7 @@ class AddSCADTask:
self.form.buttonload.clicked.connect(self.loadelement)
self.form.buttonsave.clicked.connect(self.saveelement)
self.form.buttonrefresh.clicked.connect(self.refreshelement)
def getStandardButtons(self):
return int(QtGui.QDialogButtonBox.Close)
@@ -394,10 +409,11 @@ class AddSCADTask:
pass
except OpenSCADUtils.OpenSCADError as e:
self.form.textMsg.setPlainText(e.value)
FreeCAD.Console.PrintError(e.value)
def refreshelement(self):
print('Refresh Element')
self.form.textMsg.setPlainText('')
doc=FreeCAD.activeDocument()
if doc :
for obj in doc.Objects :
@@ -405,32 +421,22 @@ class AddSCADTask:
self.addelement()
def loadelement(self):
print('Load Element')
print('Load Element')
filename, filter = QtGui.QFileDialog.getOpenFileName(parent=self.form, caption='Open file', dir='.', filter='OpenSCAD Files (*.scad)',selectedFilter='',option=0)
if filename:
print('filename :'+filename)
fp = open(filename,'r')
with fp:
data = fp.read()
self.form.textEdit.setText(data)
with open(filename,'r') as fp :
data = fp.read()
self.form.textEdit.setText(data)
def saveelement(self) :
print('Save Element')
filename, filter = QtGui.QFileDialog.getSaveFileName(parent=self.form, caption='Open file', dir='.', filter='OpenSCAD Files (*.scad)',selectedFilter='',option=0)
if filename:
print('filename :'+filename)
Text = self.form.textEdit.toPlainText()
fp = open(filename,'w')
with fp:
with open(filename,'w') as fp :
fp.write(Text)
class OpenSCADMeshBooleanWidget(QtGui.QWidget):
def __init__(self,*args):
QtGui.QWidget.__init__(self,*args)
#self.textEdit=QtGui.QTextEdit()
class OpenSCADMeshBooleanWidget(QtGui.QWidget):
def __init__(self,*args):
QtGui.QWidget.__init__(self,*args)
@@ -471,6 +477,7 @@ class OpenSCADMeshBooleanTask:
def __init__(self):
self.form = OpenSCADMeshBooleanWidget()
self.form.buttonadd.clicked.connect(self.doboolean)
def getStandardButtons(self):
return int(QtGui.QDialogButtonBox.Close)
@@ -500,9 +507,11 @@ class OpenSCADMeshBooleanTask:
class AddOpenSCADElement:
def IsActive(self):
return not FreeCADGui.Control.activeDialog()
def Activated(self):
panel = AddSCADTask()
FreeCADGui.Control.showDialog(panel)
def GetResources(self):
return {'Pixmap' : 'OpenSCAD_AddOpenSCADElement',
'MenuText': QtCore.QT_TRANSLATE_NOOP('OpenSCAD_AddOpenSCADElement', 'Add OpenSCAD Element...'),
@@ -513,9 +522,11 @@ class OpenSCADMeshBoolean:
def IsActive(self):
return not FreeCADGui.Control.activeDialog() and \
len(FreeCADGui.Selection.getSelection()) >= 1
def Activated(self):
panel = OpenSCADMeshBooleanTask()
FreeCADGui.Control.showDialog(panel)
def GetResources(self):
return {'Pixmap' : 'OpenSCAD_MeshBooleans',
'MenuText': QtCore.QT_TRANSLATE_NOOP('OpenSCAD_MeshBoolean','Mesh Boolean...'),