Fix not worked translation for cut an object with a plane feature in arch module. Without this fix cut an object with a plane does not work in languages different to English. Similar bugs was fixed earlier, but this was harder to find because of initially grayed out feature.
153 lines
6.9 KiB
Python
153 lines
6.9 KiB
Python
#***************************************************************************
|
|
#* *
|
|
#* Copyright (c) 2014 *
|
|
#* Jonathan Wiedemann <wood.galaxy@gmail.com> *
|
|
#* *
|
|
#* This program is free software; you can redistribute it and/or modify *
|
|
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
|
#* as published by the Free Software Foundation; either version 2 of *
|
|
#* the License, or (at your option) any later version. *
|
|
#* for detail see the LICENCE text file. *
|
|
#* *
|
|
#* This program is distributed in the hope that it will be useful, *
|
|
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
#* GNU Library General Public License for more details. *
|
|
#* *
|
|
#* You should have received a copy of the GNU Library General Public *
|
|
#* License along with this program; if not, write to the Free Software *
|
|
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
|
#* USA *
|
|
#* *
|
|
#***************************************************************************
|
|
|
|
import FreeCAD,ArchCommands
|
|
from FreeCAD import Vector
|
|
if FreeCAD.GuiUp:
|
|
import FreeCADGui
|
|
from PySide import QtCore, QtGui
|
|
from DraftTools import translate
|
|
else:
|
|
# \cond
|
|
def translate(ctxt,txt):
|
|
return txt
|
|
# \endcond
|
|
|
|
__title__="FreeCAD CutPlane"
|
|
__author__ = "Jonathan Wiedemann"
|
|
__url__ = "http://www.freecadweb.org"
|
|
|
|
## @package ArchCutPlane
|
|
# \ingroup ARCH
|
|
# \brief The Cut plane object and tools
|
|
#
|
|
# This module handles the Cut Plane object
|
|
|
|
def cutComponentwithPlane(archObject, cutPlane, sideFace):
|
|
"""cut object from a plan define by a face, Behind = 0 , front = 1"""
|
|
cutVolume = ArchCommands.getCutVolume(cutPlane, archObject.Object.Shape)
|
|
if sideFace == 0:
|
|
cutVolume = cutVolume[2]
|
|
else:
|
|
cutVolume = cutVolume[1]
|
|
if cutVolume:
|
|
obj = FreeCAD.ActiveDocument.addObject("Part::Feature","CutVolume")
|
|
obj.Shape = cutVolume
|
|
obj.ViewObject.ShapeColor = (1.00,0.00,0.00)
|
|
obj.ViewObject.Transparency = 75
|
|
if "Additions" in archObject.Object.PropertiesList:
|
|
return ArchCommands.removeComponents(obj,archObject.Object)
|
|
else:
|
|
cutObj = FreeCAD.ActiveDocument.addObject("Part::Cut","CutPlane")
|
|
cutObj.Base = archObject.Object
|
|
cutObj.Tool = obj
|
|
return cutObj
|
|
|
|
class _CommandCutPlane:
|
|
"the Arch CutPlane command definition"
|
|
def GetResources(self):
|
|
return {'Pixmap' : 'Arch_CutPlane',
|
|
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_CutPlane","Cut with plane"),
|
|
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_CutPlane","Cut an object with a plane")}
|
|
|
|
def IsActive(self):
|
|
return len(FreeCADGui.Selection.getSelection()) > 1
|
|
|
|
def Activated(self):
|
|
sel = FreeCADGui.Selection.getSelectionEx()
|
|
if len(sel) != 2:
|
|
FreeCAD.Console.PrintError("You must select exactly two objects, the shape to be cut and the cut plane\n")
|
|
return
|
|
if not sel[1].SubObjects:
|
|
FreeCAD.Console.PrintError("You must select a face from the second object (cut plane), not the whole object\n")
|
|
return
|
|
panel=_CutPlaneTaskPanel()
|
|
FreeCADGui.Control.showDialog(panel)
|
|
|
|
class _CutPlaneTaskPanel:
|
|
def __init__(self):
|
|
self.form = QtGui.QWidget()
|
|
self.form.setObjectName("TaskPanel")
|
|
self.grid = QtGui.QGridLayout(self.form)
|
|
self.grid.setObjectName("grid")
|
|
self.title = QtGui.QLabel(self.form)
|
|
self.grid.addWidget(self.title, 1, 0)
|
|
self.infoText = QtGui.QLabel(self.form)
|
|
self.grid.addWidget(self.infoText, 2, 0)
|
|
self.combobox = QtGui.QComboBox()
|
|
self.combobox.setCurrentIndex(0)
|
|
self.grid.addWidget(self.combobox, 2, 1)
|
|
QtCore.QObject.connect(self.combobox,QtCore.SIGNAL("currentIndexChanged(int)"),self.previewCutVolume)
|
|
self.previewObj = FreeCAD.ActiveDocument.addObject("Part::Feature","PreviewCutVolume")
|
|
self.retranslateUi(self.form)
|
|
self.previewCutVolume(self.combobox.currentIndex())
|
|
|
|
def isAllowedAlterSelection(self):
|
|
return False
|
|
|
|
def accept(self):
|
|
FreeCAD.ActiveDocument.removeObject(self.previewObj.Name)
|
|
val = self.combobox.currentIndex()
|
|
s = FreeCADGui.Selection.getSelectionEx()
|
|
if len(s) > 1:
|
|
if s[1].SubObjects:
|
|
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Cutting"))
|
|
FreeCADGui.addModule("Arch")
|
|
FreeCADGui.doCommand("Arch.cutComponentwithPlane(FreeCADGui.Selection.getSelectionEx()[0],FreeCADGui.Selection.getSelectionEx()[1].SubObjects[0],"+ str(val) +")")
|
|
FreeCAD.ActiveDocument.commitTransaction()
|
|
FreeCAD.ActiveDocument.recompute()
|
|
return True
|
|
FreeCAD.Console.PrintError("Wrong selection\n")
|
|
return True
|
|
|
|
def reject(self):
|
|
FreeCAD.ActiveDocument.removeObject(self.previewObj.Name)
|
|
FreeCAD.Console.PrintMessage("Cancel Cut Plane\n")
|
|
return True
|
|
|
|
def getStandardButtons(self):
|
|
return int(QtGui.QDialogButtonBox.Ok|QtGui.QDialogButtonBox.Cancel)
|
|
|
|
def previewCutVolume(self, i):
|
|
cutVolume = ArchCommands.getCutVolume(FreeCADGui.Selection.getSelectionEx()[1].SubObjects[0], FreeCADGui.Selection.getSelectionEx()[0].Object.Shape)
|
|
FreeCAD.ActiveDocument.removeObject(self.previewObj.Name)
|
|
self.previewObj = FreeCAD.ActiveDocument.addObject("Part::Feature", "PreviewCutVolume")
|
|
self.previewObj.ViewObject.ShapeColor = (1.00,0.00,0.00)
|
|
self.previewObj.ViewObject.Transparency = 75
|
|
if i == 1:
|
|
cutVolume = cutVolume[1]
|
|
else:
|
|
cutVolume = cutVolume[2]
|
|
if cutVolume:
|
|
self.previewObj.Shape = cutVolume
|
|
|
|
def retranslateUi(self, TaskPanel):
|
|
TaskPanel.setWindowTitle(QtGui.QApplication.translate("Arch", "Cut Plane", None))
|
|
self.title.setText(QtGui.QApplication.translate("Arch", "Cut Plane options", None))
|
|
self.infoText.setText(QtGui.QApplication.translate("Arch", "Which side to cut", None))
|
|
self.combobox.addItems([QtGui.QApplication.translate("Arch", "Behind", None),
|
|
QtGui.QApplication.translate("Arch", "Front", None)])
|
|
|
|
if FreeCAD.GuiUp:
|
|
FreeCADGui.addCommand('Arch_CutPlane',_CommandCutPlane())
|