INSTALL(FILES __init__.py DESTINATION ${SHAPER_INSTALL_ADDONS})
INSTALL(DIRECTORY macros DESTINATION ${SHAPER_INSTALL_ADDONS})
-INSTALL(DIRECTORY macros/box/icons/ macros/rectangle/icons/ DESTINATION ${SHAPER_INSTALL_XML_RESOURCES}/icons/Addons)
+INSTALL(DIRECTORY macros/rectangle/icons/ DESTINATION ${SHAPER_INSTALL_XML_RESOURCES}/icons/Addons)
INSTALL(FILES ${TEXT_RESOURCES} DESTINATION ${SHAPER_INSTALL_XML_RESOURCES})
INCLUDE(UnitTest)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="en_US">
-<context>
- <name>Box:Model_FeatureValidator</name>
- <message>
- <source>Attribute "height" is not initialized.</source>
- <translation>Height of the box is not defined.</translation>
- </message>
-</context>
-<context>
- <name>Box:height:GeomValidators_Positive</name>
- <message>
- <source>Double is not initialized.</source>
- <translation>Height of the box is not defined.</translation>
- </message>
-</context>
-<context>
- <name>Box:height:GeomValidators_Positive</name>
- <message>
- <source>Value is too small.</source>
- <translation>Height of the box is too small.</translation>
- </message>
-</context>
-<context>
- <name>Box:height:GeomValidators_Positive</name>
- <message>
- <source>Integer is not initialized.</source>
- <translation>Height of the box is not defined.</translation>
- </message>
-</context>
-<context>
- <name>Box:height:GeomValidators_Positive</name>
- <message>
- <source>Integer is not positive.</source>
- <translation>Height of the box is too small.</translation>
- </message>
-</context>
-<context>
- <name>Box:Model_FeatureValidator</name>
- <message>
- <source>Attribute "width" is not initialized.</source>
- <translation>Set the box width</translation>
- </message>
-</context>
-<context>
- <name>Box:Model_FeatureValidator</name>
- <message>
- <source>Attribute "length" is not initialized.</source>
- <translation>Set the box length</translation>
- </message>
-</context>
-<context>
- <name>Box:Model_FeatureValidator</name>
- <message>
- <source>Attribute "height" is not initialized.</source>
- <translation>Set the box height</translation>
- </message>
-</context>
-<context>
- <name>Box:width:GeomValidators_Positive</name>
- <message>
- <source>Double is not initialized.</source>
- <translation>Set the box width</translation>
- </message>
-</context>
-<context>
- <name>Box:width:GeomValidators_Positive</name>
- <message>
- <source>Value is too small.</source>
- <translation>The box width is too small</translation>
- </message>
-</context>
-<context>
- <name>Box:width:GeomValidators_Positive</name>
- <message>
- <source>Integer is not initialized.</source>
- <translation></translation>
- </message>
-</context>
-<context>
- <name>Box:width:GeomValidators_Positive</name>
- <message>
- <source>Integer is not positive.</source>
- <translation></translation>
- </message>
-</context>
-<context>
- <name>Box:length:GeomValidators_Positive</name>
- <message>
- <source>Double is not initialized.</source>
- <translation>Set the box length</translation>
- </message>
-</context>
-<context>
- <name>Box:length:GeomValidators_Positive</name>
- <message>
- <source>Value is too small.</source>
- <translation>The box width is too small</translation>
- </message>
-</context>
-<context>
- <name>Box:length:GeomValidators_Positive</name>
- <message>
- <source>Integer is not initialized.</source>
- <translation></translation>
- </message>
-</context>
-<context>
- <name>Box:length:GeomValidators_Positive</name>
- <message>
- <source>Integer is not positive.</source>
- <translation></translation>
- </message>
-</context>
</TS>
"""
import ModelAPI
-from macros.box.feature import BoxFeature
from macros.rectangle.feature import SketchPlugin_Rectangle
"""Override ModelAPI_Plugin.createFeature()"""
aFeature = None
- if theFeatureID == BoxFeature.ID():
- aFeature = BoxFeature().__disown__()
-
- elif theFeatureID == SketchPlugin_Rectangle.ID():
+ if theFeatureID == SketchPlugin_Rectangle.ID():
aFeature = SketchPlugin_Rectangle().__disown__()
else:
<plugin>
- <source path="@ADDONS_FOLDER_PATH@/macros/box/widget.xml"/>
<source path="@ADDONS_FOLDER_PATH@/macros/rectangle/widget.xml"/>
</plugin>
:titlesonly:
:maxdepth: 1
- boxFeature.rst
rectangleFeature.rst
+++ /dev/null
-
-Box
-===
-
-Custom files for **Box** feature are:
-
-- empty __init__.py,
-- :ref:`create_custom_box_py`,
-- :ref:`create_custom_box_xml`,
-- icon.png located at sub-folder */icons*.
-
-.. image:: images/box_ico.png
- :align: center
-
-.. centered::
- File icon.png
-
-The custom **Box** feature creates a box solid by extrusion of rectangle.
-
-To create a Box in the active part:
-
-#. select in the Main Menu *Macros - > Box* item or
-#. click **Box** button in the Macros toolbar corresponding to file icon.png:
-
-The following property panel appears.
-
-.. image:: images/box_property_panel.png
- :align: center
-
-.. centered::
- Create a box
-
-Input fields:
-
-- **Width**, **Length**, **Height** are sizes of the box along the corresponding coordinate axes. The box will be created starting from the origin.
-
-Result
-""""""
-
-The Result of operation will be Extrusion and Sketch.
-
-The edges of the box will be parallel to the coordinate axes.
-
-.. image:: images/Boxes.png
- :align: center
-
-.. centered::
- Created box
\ No newline at end of file
+++ /dev/null
-# Copyright (C) 2014-2019 CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library 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
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-"""
-Box macro-feature
-Authors: Renaud Nedelec - Daniel Brunier-Coulin
-"""
-
-from salome.shaper import model
-from salome.shaper import geom
-
-
-class BoxFeature(model.Feature):
- """An example of Box feature implementation.
-
- BoxFeature() -> Box
- """
-
-# Initializations
-
- def __init__(self):
- """x.__init__(...) initializes x; see x.__class__.__doc__ for signature"""
- model.Feature.__init__(self)
-
- @staticmethod
- def ID():
- """Return Id of the feature."""
- return "Box_script"
-
- @staticmethod
- def WIDTH_ID():
- """Returns ID of Width parameter."""
- return "width"
-
- @staticmethod
- def LENGTH_ID():
- """Returns ID of Length parameter."""
- return "length"
-
- @staticmethod
- def HEIGHT_ID():
- """Returns ID of Height parameter."""
- return "height"
-
- def getKind(self):
- """Override Feature.getKind()"""
- return BoxFeature.ID()
-
-
-# Creation of the box at default size
-
- def initAttributes(self):
- """Override Feature.initAttributes()"""
- # Creating the input arguments of the feature
- self.addRealInput(self.WIDTH_ID())
- self.addRealInput(self.LENGTH_ID())
- self.addRealInput(self.HEIGHT_ID())
-
- # Creating the base of the box with unit values
- mypart = model.activeDocument()
- xoy = model.defaultPlane("XOY")
-
- # A base of the geometry
- self.base = model.addSketch(mypart, xoy)
-
- p1 = geom.Pnt2d(0, 0)
- p2 = geom.Pnt2d(0, 1)
- p3 = geom.Pnt2d(1, 1)
- p4 = geom.Pnt2d(1, 0)
-
- line = model.addPolygon(self.base, p1, p2, p3, p4)
-
- self.base.setFixed(line[0].startPoint())
- self.base.setVertical(line[0])
-
- # Setting the size of the base with default values
- # Width
- self.width = self.base.setLength(line[3], 50) # Keeps the constraint for edition
- # Length
- self.length = self.base.setLength(line[0], 50) # Keeps the constraint for edition
-
- # Keeping the rectangle
- self.base.setParallel(line[0], line[2])
- self.base.setParallel(line[1], line[3])
- self.base.setPerpendicular(line[0], line[3])
-
- # execute sketch
- mypart.setCurrentFeature(self.base.feature(), False)
- model.updateFeatures()
-
- # Creating the extrusion (the box) at default size
- # A box result
- self.box = model.addExtrusion(mypart, self.base.selectFace(), 50)
-
-# Edition of the box at user size
-
- def execute(self):
- """F.execute() -- execute the feature"""
- # Retrieving the user inputs
- width = self.real(self.WIDTH_ID())
- length = self.real(self.LENGTH_ID())
- height = self.real(self.HEIGHT_ID())
-
- # Editing the box
- if width.text() == "":
- self.base.setValue(self.width, width.value())
- else:
- self.base.setValue(self.width, width.text())
-
- if length.text() == "":
- self.base.setValue(self.length, length.value())
- else:
- self.base.setValue(self.length, length.text())
-
- if (height.text() == ""):
- self.box.setSize(height.value())
- else:
- self.box.setSize(height.text())
-
- # Publishing the result: not needed for Macro feature
- # self.addResult( self.box.result() )
-
- def isMacro(self):
- """Override Feature.initAttributes().
- F.isMacro() -> True
-
- Box feature is macro: removes itself on the creation transaction
- finish.
- """
- return True
+++ /dev/null
-<source>
- <workbench id="Macros" document="Part">
- <group id="Samples">
-
- <feature id="Box_script" title="Box" tooltip="Create a box parallel to xyz by extruding a rectangular" icon="icons/Addons/box_ico.png"
- helpfile="boxFeature.html">
- <doublevalue id="width" label="Width: " min="0" step="1.0" default="50" tooltip="Box width">
- <validator id="GeomValidators_Positive"/>
- </doublevalue>
- <doublevalue id="length" label="Length: " min="0" step="1.0" default="50" tooltip="Box length">
- <validator id="GeomValidators_Positive"/>
- </doublevalue>
- <doublevalue id="height" label="Height: " min="0" step="1.0" default="50" tooltip="Box height">
- <validator id="GeomValidators_Positive"/>
- </doublevalue>
- </feature>
-
- </group>
- </workbench>
-</source>
+++ /dev/null
-
- .. _create_custom_box_py:
-
-File feature.py
-===============
-
-.. literalinclude:: examples/box/feature.py
- :linenos:
- :language: python
-
-:download:`Download this script <examples/box/feature.py>`
\ No newline at end of file
+++ /dev/null
-
- .. _create_custom_box_xml:
-
-File widget.xml
-===============
-
-.. literalinclude:: examples/box/widget.xml
- :linenos:
- :language: html
-
-:download:`Download this script <examples/box/widget.xml>`
\ No newline at end of file
+++ /dev/null
-# Copyright (C) 2015-2019 CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library 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
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
+++ /dev/null
-# Copyright (C) 2014-2019 CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library 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
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-"""
-Box macro-feature
-Authors: Renaud Nedelec - Daniel Brunier-Coulin
-"""
-
-from salome.shaper import model
-from salome.shaper import geom
-
-
-class BoxFeature(model.Feature):
- """An example of Box feature implementation.
-
- BoxFeature() -> Box
- """
-
-# Initializations
-
- def __init__(self):
- """x.__init__(...) initializes x; see x.__class__.__doc__ for signature"""
- model.Feature.__init__(self)
-
- @staticmethod
- def ID():
- """Return Id of the feature."""
- return "Box_script"
-
- @staticmethod
- def WIDTH_ID():
- """Returns ID of Width parameter."""
- return "width"
-
- @staticmethod
- def LENGTH_ID():
- """Returns ID of Length parameter."""
- return "length"
-
- @staticmethod
- def HEIGHT_ID():
- """Returns ID of Height parameter."""
- return "height"
-
- def getKind(self):
- """Override Feature.getKind()"""
- return BoxFeature.ID()
-
-
-# Creation of the box at default size
-
- def initAttributes(self):
- """Override Feature.initAttributes()"""
- # Creating the input arguments of the feature
- self.addRealInput(self.WIDTH_ID())
- self.addRealInput(self.LENGTH_ID())
- self.addRealInput(self.HEIGHT_ID())
-
- # Creating the base of the box with unit values
- mypart = model.activeDocument()
- xoy = model.defaultPlane("XOY")
-
- # A base of the geometry
- self.base = model.addSketch(mypart, xoy)
-
- p1 = geom.Pnt2d(0, 0)
- p2 = geom.Pnt2d(0, 1)
- p3 = geom.Pnt2d(1, 1)
- p4 = geom.Pnt2d(1, 0)
-
- line = model.addPolygon(self.base, p1, p2, p3, p4)
-
- self.base.setFixed(line[0].startPoint())
- self.base.setVertical(line[0])
-
- # Setting the size of the base with default values
- # Width
- self.width = self.base.setLength(line[3], 50) # Keeps the constraint for edition
- # Length
- self.length = self.base.setLength(line[0], 50) # Keeps the constraint for edition
-
- # Keeping the rectangle
- self.base.setParallel(line[0], line[2])
- self.base.setParallel(line[1], line[3])
- self.base.setPerpendicular(line[0], line[3])
-
- # execute sketch
- mypart.setCurrentFeature(self.base.feature(), False)
- model.updateFeatures()
-
- # Creating the extrusion (the box) at default size
- # A box result
- self.box = model.addExtrusion(mypart, self.base.selectFace(), 50)
-
-# Edition of the box at user size
-
- def execute(self):
- """F.execute() -- execute the feature"""
- # Retrieving the user inputs
- width = self.real(self.WIDTH_ID())
- length = self.real(self.LENGTH_ID())
- height = self.real(self.HEIGHT_ID())
-
- # Editing the box
- if width.text() == "":
- self.base.setValue(self.width, width.value())
- else:
- self.base.setValue(self.width, width.text())
-
- if length.text() == "":
- self.base.setValue(self.length, length.value())
- else:
- self.base.setValue(self.length, length.text())
-
- if (height.text() == ""):
- self.box.setSize(height.value())
- else:
- self.box.setSize(height.text())
-
- # Publishing the result: not needed for Macro feature
- # self.addResult( self.box.result() )
-
- def isMacro(self):
- """Override Feature.initAttributes().
- F.isMacro() -> True
-
- Box feature is macro: removes itself on the creation transaction
- finish.
- """
- return True
+++ /dev/null
-<source>
- <workbench id="Macros" document="Part">
- <group id="Samples">
-
- <feature id="Box_script" title="Box" tooltip="Create a box parallel to xyz by extruding a rectangular" icon="icons/Addons/box_ico.png"
- helpfile="boxFeature.html">
- <doublevalue id="width" label="Width: " min="0" step="1.0" default="50" tooltip="Box width">
- <validator id="GeomValidators_Positive"/>
- </doublevalue>
- <doublevalue id="length" label="Length: " min="0" step="1.0" default="50" tooltip="Box length">
- <validator id="GeomValidators_Positive"/>
- </doublevalue>
- <doublevalue id="height" label="Height: " min="0" step="1.0" default="50" tooltip="Box height">
- <validator id="GeomValidators_Positive"/>
- </doublevalue>
- </feature>
-
- </group>
- </workbench>
-</source>