Part: new tools - JoinFeatures (Connect, Embed and Cutout)
Attributions: Mark (quick61) - icons Yorik - help with internationalization Everyone who appeared in forum thread "A new Part tool is being born... JoinFeatures!" - for endorsement! http://forum.freecadweb.org/viewtopic.php?f=22&t=11112
This commit is contained in:
parent
5ced7e5cbe
commit
37fbcb64a6
|
@ -265,6 +265,7 @@ SET(Part_Scripts
|
||||||
Init.py
|
Init.py
|
||||||
TestPartApp.py
|
TestPartApp.py
|
||||||
MakeBottle.py
|
MakeBottle.py
|
||||||
|
JoinFeatures.py
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(Part SHARED ${Part_SRCS})
|
add_library(Part SHARED ${Part_SRCS})
|
||||||
|
|
|
@ -11,6 +11,7 @@ INSTALL(
|
||||||
MakeBottle.py
|
MakeBottle.py
|
||||||
TestPartApp.py
|
TestPartApp.py
|
||||||
TestPartGui.py
|
TestPartGui.py
|
||||||
|
JoinFeatures.py
|
||||||
DESTINATION
|
DESTINATION
|
||||||
Mod/Part
|
Mod/Part
|
||||||
)
|
)
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include <Base/Exception.h>
|
#include <Base/Exception.h>
|
||||||
#include <App/Document.h>
|
#include <App/Document.h>
|
||||||
#include <App/DocumentObjectGroup.h>
|
#include <App/DocumentObjectGroup.h>
|
||||||
|
#include <Gui/Action.h>
|
||||||
#include <Gui/Application.h>
|
#include <Gui/Application.h>
|
||||||
#include <Gui/BitmapFactory.h>
|
#include <Gui/BitmapFactory.h>
|
||||||
#include <Gui/Command.h>
|
#include <Gui/Command.h>
|
||||||
|
@ -490,6 +491,101 @@ bool CmdPartFuse::isActive(void)
|
||||||
return getSelection().countObjectsOfType(Part::Feature::getClassTypeId())>=2;
|
return getSelection().countObjectsOfType(Part::Feature::getClassTypeId())>=2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
// Part_CompJoinFeatures (dropdown toolbar button for Connect, Embed and Cutout)
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
DEF_STD_CMD_ACL(CmdPartCompJoinFeatures);
|
||||||
|
|
||||||
|
CmdPartCompJoinFeatures::CmdPartCompJoinFeatures()
|
||||||
|
: Command("Part_CompJoinFeatures")
|
||||||
|
{
|
||||||
|
sAppModule = "Part";
|
||||||
|
sGroup = QT_TR_NOOP("Part");
|
||||||
|
sMenuText = QT_TR_NOOP("Join objects...");
|
||||||
|
sToolTipText = QT_TR_NOOP("Join walled objects");
|
||||||
|
sWhatsThis = "Part_CompJoinFeatures";
|
||||||
|
sStatusTip = sToolTipText;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CmdPartCompJoinFeatures::activated(int iMsg)
|
||||||
|
{
|
||||||
|
Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager();
|
||||||
|
if (iMsg==0)
|
||||||
|
rcCmdMgr.runCommandByName("Part_JoinConnect");
|
||||||
|
else if (iMsg==1)
|
||||||
|
rcCmdMgr.runCommandByName("Part_JoinEmbed");
|
||||||
|
else if (iMsg==2)
|
||||||
|
rcCmdMgr.runCommandByName("Part_JoinCutout");
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Since the default icon is reset when enabing/disabling the command we have
|
||||||
|
// to explicitly set the icon of the used command.
|
||||||
|
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
|
||||||
|
QList<QAction*> a = pcAction->actions();
|
||||||
|
|
||||||
|
assert(iMsg < a.size());
|
||||||
|
pcAction->setIcon(a[iMsg]->icon());
|
||||||
|
}
|
||||||
|
|
||||||
|
Gui::Action * CmdPartCompJoinFeatures::createAction(void)
|
||||||
|
{
|
||||||
|
Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow());
|
||||||
|
pcAction->setDropDownMenu(true);
|
||||||
|
applyCommandData(this->className(), pcAction);
|
||||||
|
|
||||||
|
QAction* cmd0 = pcAction->addAction(QString());
|
||||||
|
cmd0->setIcon(Gui::BitmapFactory().pixmap("Part_JoinConnect"));
|
||||||
|
QAction* cmd1 = pcAction->addAction(QString());
|
||||||
|
cmd1->setIcon(Gui::BitmapFactory().pixmap("Part_JoinEmbed"));
|
||||||
|
QAction* cmd2 = pcAction->addAction(QString());
|
||||||
|
cmd2->setIcon(Gui::BitmapFactory().pixmap("Part_JoinCutout"));
|
||||||
|
|
||||||
|
_pcAction = pcAction;
|
||||||
|
languageChange();
|
||||||
|
|
||||||
|
pcAction->setIcon(cmd0->icon());
|
||||||
|
int defaultId = 0;
|
||||||
|
pcAction->setProperty("defaultAction", QVariant(defaultId));
|
||||||
|
|
||||||
|
return pcAction;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CmdPartCompJoinFeatures::languageChange()
|
||||||
|
{
|
||||||
|
Command::languageChange();
|
||||||
|
|
||||||
|
if (!_pcAction)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager();
|
||||||
|
|
||||||
|
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
|
||||||
|
QList<QAction*> a = pcAction->actions();
|
||||||
|
|
||||||
|
QAction* cmd0 = a[0];
|
||||||
|
cmd0->setText(QApplication::translate("PartCompJoinFeatures", rcCmdMgr.getCommandByName("Part_JoinConnect")->getMenuText()));
|
||||||
|
cmd0->setToolTip(QApplication::translate("Part_JoinConnect", rcCmdMgr.getCommandByName("Part_JoinConnect")->getToolTipText()));
|
||||||
|
cmd0->setStatusTip(QApplication::translate("Part_JoinConnect", rcCmdMgr.getCommandByName("Part_JoinConnect")->getStatusTip()));
|
||||||
|
QAction* cmd1 = a[1];
|
||||||
|
cmd1->setText(QApplication::translate("PartCompJoinFeatures", rcCmdMgr.getCommandByName("Part_JoinEmbed")->getMenuText()));
|
||||||
|
cmd1->setToolTip(QApplication::translate("Part_JoinEmbed", rcCmdMgr.getCommandByName("Part_JoinEmbed")->getToolTipText()));
|
||||||
|
cmd1->setStatusTip(QApplication::translate("Part_JoinEmbed", rcCmdMgr.getCommandByName("Part_JoinEmbed")->getStatusTip()));
|
||||||
|
QAction* cmd2 = a[2];
|
||||||
|
cmd2->setText(QApplication::translate("PartCompJoinFeatures", rcCmdMgr.getCommandByName("Part_JoinCutout")->getMenuText()));
|
||||||
|
cmd2->setToolTip(QApplication::translate("Part_JoinCutout", rcCmdMgr.getCommandByName("Part_JoinCutout")->getToolTipText()));
|
||||||
|
cmd2->setStatusTip(QApplication::translate("Part_JoinCutout", rcCmdMgr.getCommandByName("Part_JoinCutout")->getStatusTip()));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CmdPartCompJoinFeatures::isActive(void)
|
||||||
|
{
|
||||||
|
if (getActiveGuiDocument())
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
// Part_Compound
|
// Part_Compound
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
@ -1747,6 +1843,7 @@ void CreatePartCommands(void)
|
||||||
rcCmdMgr.addCommand(new CmdPartCommon());
|
rcCmdMgr.addCommand(new CmdPartCommon());
|
||||||
rcCmdMgr.addCommand(new CmdPartCut());
|
rcCmdMgr.addCommand(new CmdPartCut());
|
||||||
rcCmdMgr.addCommand(new CmdPartFuse());
|
rcCmdMgr.addCommand(new CmdPartFuse());
|
||||||
|
rcCmdMgr.addCommand(new CmdPartCompJoinFeatures());
|
||||||
rcCmdMgr.addCommand(new CmdPartCompound());
|
rcCmdMgr.addCommand(new CmdPartCompound());
|
||||||
rcCmdMgr.addCommand(new CmdPartSection());
|
rcCmdMgr.addCommand(new CmdPartSection());
|
||||||
//rcCmdMgr.addCommand(new CmdPartBox2());
|
//rcCmdMgr.addCommand(new CmdPartBox2());
|
||||||
|
|
|
@ -59,6 +59,10 @@
|
||||||
<file>icons/Tree_Part_Prism.svg</file>
|
<file>icons/Tree_Part_Prism.svg</file>
|
||||||
<file>icons/Tree_Part_Wedge.svg</file>
|
<file>icons/Tree_Part_Wedge.svg</file>
|
||||||
<file>icons/Part_Shape_from_Mesh.svg</file>
|
<file>icons/Part_Shape_from_Mesh.svg</file>
|
||||||
|
<file>icons/Part_JoinBypass.svg</file>
|
||||||
|
<file>icons/Part_JoinConnect.svg</file>
|
||||||
|
<file>icons/Part_JoinCutout.svg</file>
|
||||||
|
<file>icons/Part_JoinEmbed.svg</file>
|
||||||
<file>translations/Part_af.qm</file>
|
<file>translations/Part_af.qm</file>
|
||||||
<file>translations/Part_de.qm</file>
|
<file>translations/Part_de.qm</file>
|
||||||
<file>translations/Part_fi.qm</file>
|
<file>translations/Part_fi.qm</file>
|
||||||
|
|
203
src/Mod/Part/Gui/Resources/icons/Part_JoinBypass.svg
Normal file
203
src/Mod/Part/Gui/Resources/icons/Part_JoinBypass.svg
Normal file
|
@ -0,0 +1,203 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="64px"
|
||||||
|
height="64px"
|
||||||
|
id="svg2644"
|
||||||
|
sodipodi:version="0.32"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="Part-Cutout.svg"
|
||||||
|
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:export-filename="C:\_vt\dev\PC\Qt\FreeCAD\macros\JoinFeatures\resources\icons\try2\Part-Cutout64.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs2646">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3787">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#f17878;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop3789" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#870e0e;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop3791" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3864">
|
||||||
|
<stop
|
||||||
|
id="stop3866"
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#71b2f8;stop-opacity:1;" />
|
||||||
|
<stop
|
||||||
|
id="stop3868"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#002795;stop-opacity:1;" />
|
||||||
|
</linearGradient>
|
||||||
|
<inkscape:perspective
|
||||||
|
sodipodi:type="inkscape:persp3d"
|
||||||
|
inkscape:vp_x="0 : 32 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_z="64 : 32 : 1"
|
||||||
|
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||||
|
id="perspective2652" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3864"
|
||||||
|
id="radialGradient3761"
|
||||||
|
cx="172.60796"
|
||||||
|
cy="10.167614"
|
||||||
|
fx="172.60796"
|
||||||
|
fy="10.167614"
|
||||||
|
r="22.06875"
|
||||||
|
gradientTransform="matrix(1,0,0,0.99858397,0,0.01439764)"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3787"
|
||||||
|
id="radialGradient3796"
|
||||||
|
cx="15.844314"
|
||||||
|
cy="22.236769"
|
||||||
|
fx="15.844314"
|
||||||
|
fy="22.236769"
|
||||||
|
r="24.5"
|
||||||
|
gradientTransform="matrix(-1.7959187,-8.5004252e-7,7.4195815e-7,-1.6326528,246.83616,55.161607)"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3864"
|
||||||
|
id="radialGradient3775"
|
||||||
|
cx="221.79019"
|
||||||
|
cy="36.43409"
|
||||||
|
fx="221.79019"
|
||||||
|
fy="36.43409"
|
||||||
|
r="30.999998"
|
||||||
|
gradientTransform="matrix(-1.4193551,-5.0298722e-7,4.5726095e-7,-1.2903224,533.18009,65.868506)"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3864"
|
||||||
|
id="radialGradient3785"
|
||||||
|
cx="24.500006"
|
||||||
|
cy="35.850002"
|
||||||
|
fx="24.500006"
|
||||||
|
fy="35.850002"
|
||||||
|
r="11"
|
||||||
|
gradientTransform="matrix(-3.9999998,-1.5358005e-6,1.3961822e-6,-3.6363634,119.99997,148.36367)"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3864"
|
||||||
|
id="radialGradient3801"
|
||||||
|
cx="21.999996"
|
||||||
|
cy="17.999996"
|
||||||
|
fx="21.999996"
|
||||||
|
fy="17.999996"
|
||||||
|
r="10.5"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(-4.1904764,-1.5632622e-6,1.4211471e-6,-3.8095236,114.19044,86.57144)" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="7.7781746"
|
||||||
|
inkscape:cx="-13.073002"
|
||||||
|
inkscape:cy="33.785734"
|
||||||
|
inkscape:current-layer="g3706"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:grid-bbox="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="990"
|
||||||
|
inkscape:window-x="-11"
|
||||||
|
inkscape:window-y="-11"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-grids="true"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid3777"
|
||||||
|
empspacing="5"
|
||||||
|
visible="true"
|
||||||
|
enabled="true"
|
||||||
|
snapvisiblegridlinesonly="true"
|
||||||
|
spacingx="4px"
|
||||||
|
spacingy="4px"
|
||||||
|
originy="2px"
|
||||||
|
originx="2px" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata2649">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer">
|
||||||
|
<g
|
||||||
|
id="g3706"
|
||||||
|
transform="translate(-196.38107,-0.85667132)"
|
||||||
|
style="fill:#908c8c;fill-opacity:1">
|
||||||
|
<rect
|
||||||
|
style="fill:url(#radialGradient3785);stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
|
||||||
|
id="rect3763"
|
||||||
|
width="20"
|
||||||
|
height="60"
|
||||||
|
x="14"
|
||||||
|
y="2"
|
||||||
|
transform="translate(196.38107,0.85667132)" />
|
||||||
|
<rect
|
||||||
|
style="fill:url(#radialGradient3775);stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
|
||||||
|
id="rect3765"
|
||||||
|
width="59.999996"
|
||||||
|
height="20"
|
||||||
|
x="198.38107"
|
||||||
|
y="26.85667"
|
||||||
|
ry="0" />
|
||||||
|
<path
|
||||||
|
style="fill:url(#radialGradient3796);fill-opacity:1.0;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 210.38107,26.856671 0,20 20,0 0,-20 z"
|
||||||
|
id="path3784"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:url(#radialGradient3801);stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 22,26 -8,8 0,8 16,-16 4,0 0,4 -16,16 8,0 8,-8"
|
||||||
|
id="path3793"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
transform="translate(196.38107,0.85667132)" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||||
|
id="rect3803"
|
||||||
|
width="20"
|
||||||
|
height="20"
|
||||||
|
x="14"
|
||||||
|
y="26"
|
||||||
|
transform="translate(196.38107,0.85667132)" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.8 KiB |
194
src/Mod/Part/Gui/Resources/icons/Part_JoinConnect.svg
Normal file
194
src/Mod/Part/Gui/Resources/icons/Part_JoinConnect.svg
Normal file
|
@ -0,0 +1,194 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="64"
|
||||||
|
height="64"
|
||||||
|
viewBox="0 0 18.062222 18.062221"
|
||||||
|
version="1.1"
|
||||||
|
id="svg6662"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="Connect.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata6694">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs6692">
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4391"
|
||||||
|
id="radialGradient3552"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
cx="48.645836"
|
||||||
|
cy="25.149042"
|
||||||
|
fx="48.645836"
|
||||||
|
fy="25.149042"
|
||||||
|
r="19.571428" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4391">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop4393" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#002795;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop4395" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
r="19.571428"
|
||||||
|
fy="25.149042"
|
||||||
|
fx="48.645836"
|
||||||
|
cy="25.149042"
|
||||||
|
cx="48.645836"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient6546"
|
||||||
|
xlink:href="#linearGradient4391"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4391"
|
||||||
|
id="radialGradient7250"
|
||||||
|
cx="4.8811665"
|
||||||
|
cy="14.492186"
|
||||||
|
fx="4.8811665"
|
||||||
|
fy="14.492186"
|
||||||
|
r="3.7374249"
|
||||||
|
gradientTransform="matrix(-0.81470605,-0.00967045,0.03403256,-2.8671429,8.3666287,41.405173)"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4391"
|
||||||
|
id="radialGradient7271"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(-0.81470605,-0.00967045,0.03403256,-2.8671429,8.3666287,41.405173)"
|
||||||
|
cx="4.8811665"
|
||||||
|
cy="14.492186"
|
||||||
|
fx="4.8811665"
|
||||||
|
fy="14.492186"
|
||||||
|
r="3.7374249" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1600"
|
||||||
|
inkscape:window-height="824"
|
||||||
|
id="namedview6690"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="8.1523184"
|
||||||
|
inkscape:cx="37.110431"
|
||||||
|
inkscape:cy="27.597859"
|
||||||
|
inkscape:window-x="-2"
|
||||||
|
inkscape:window-y="53"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg6662" />
|
||||||
|
<g
|
||||||
|
id="g7252"
|
||||||
|
transform="matrix(0.9962767,0,0,1.0097864,-0.00324012,-0.17735289)">
|
||||||
|
<path
|
||||||
|
id="Cut001_f0000"
|
||||||
|
d="m 1.2212469,17.887225 0,0 0,-17.53601187 0,0 0,17.53601187 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0002"
|
||||||
|
d="m 1.2212469,0.35121313 0,17.53601187 -1.04624903,0 0,-17.53601187 1.04624903,0 z"
|
||||||
|
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0004"
|
||||||
|
d="m 8.5449899,0.35121313 -7.323743,0 0,17.53601187 7.323743,0 0,-5.480004 0,-5.480004 0,-6.57600387 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0005"
|
||||||
|
d="m 0.17499787,0.35121313 0,17.53601187 0,0 0,-17.53601187 0,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0007"
|
||||||
|
d="m 8.5449899,0.35121313 0,17.53601187 -7.323743,0 0,-17.53601187 7.323743,0 z"
|
||||||
|
style="fill:url(#radialGradient7271);fill-opacity:1;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0008"
|
||||||
|
d="m 8.5449899,0.35121313 a 1.046249,1.0960006 0 0 0 1.046249,0 l 0,6.57600387 0,5.480004 0,5.480004 a 1.046249,1.0960006 0 0 0 -1.046249,0 l 0,-17.53601187 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0009"
|
||||||
|
d="m 9.5912389,13.503222 0,4.384003 0,0 0,-5.480004 a 1.046249,1.0960006 0 0 0 0,1.096001 l 0,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0010"
|
||||||
|
d="m 8.5449899,12.407221 0,5.480004 1.046249,0 0,-4.384003 8.3699921,0 0,-1.096001 -9.4162411,0 z"
|
||||||
|
style="fill:#c00000;fill-opacity:1;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0011"
|
||||||
|
d="m 8.5449899,17.887225 0,0 0,-5.480004 0,0 0,-5.480004 0,0 0,-6.57600387 0,0 0,6.57600387 0,5.480004 0,5.480004 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0012"
|
||||||
|
d="m 9.5912389,0.35121313 0,0 0,5.48000317 0,0 a 1.046249,1.0960006 0 0 0 0,1.0960007 l 0,-6.57600387 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0013"
|
||||||
|
d="m 8.5449899,0.35121313 0,6.57600387 9.4162411,0 0,-1.0960007 -8.3699921,0 0,-5.48000317 -1.046249,0 z"
|
||||||
|
style="fill:#c00000;fill-opacity:1;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0014"
|
||||||
|
d="m 17.961231,12.407221 0,-5.480004 -8.3699921,0 0,5.480004 8.3699921,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0015"
|
||||||
|
d="m 9.5912389,13.503222 8.3699921,0 0,0 -8.3699921,0 0,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0017"
|
||||||
|
d="m 8.5449899,12.407221 1.046249,0 8.3699921,0 0,0 -9.4162411,0 0,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0019"
|
||||||
|
d="m 8.5449899,6.927217 1.046249,0 8.3699921,0 0,5.480004 -8.3699921,0 -1.046249,0 0,-5.480004 z"
|
||||||
|
style="fill:#002795;fill-opacity:1;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0020"
|
||||||
|
d="m 8.5449899,6.927217 0,0 1.046249,0 8.3699921,0 0,0 -9.4162411,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut001_f0022"
|
||||||
|
d="m 9.5912389,5.8312163 8.3699921,0 0,0 -8.3699921,0 0,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15110685;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.2 KiB |
185
src/Mod/Part/Gui/Resources/icons/Part_JoinCutout.svg
Normal file
185
src/Mod/Part/Gui/Resources/icons/Part_JoinCutout.svg
Normal file
|
@ -0,0 +1,185 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="64"
|
||||||
|
height="64"
|
||||||
|
viewBox="0 0 18.062221 18.062221"
|
||||||
|
version="1.1"
|
||||||
|
id="svg5940"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="Cutout.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata5968">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs5966">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6569">
|
||||||
|
<stop
|
||||||
|
id="stop6571"
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#73b2f6;stop-opacity:1;" />
|
||||||
|
<stop
|
||||||
|
id="stop6573"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#002795;stop-opacity:1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6517"
|
||||||
|
osb:paint="solid">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#0000ff;stop-opacity:0.63855422;"
|
||||||
|
offset="0"
|
||||||
|
id="stop6519" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient6497">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ff0000;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop6499" />
|
||||||
|
<stop
|
||||||
|
id="stop6509"
|
||||||
|
offset="0.5"
|
||||||
|
style="stop-color:#df0000;stop-opacity:0.49803922;" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#0000ff;stop-opacity:0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop6501" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4391"
|
||||||
|
id="radialGradient3552"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
cx="48.645836"
|
||||||
|
cy="25.149042"
|
||||||
|
fx="48.645836"
|
||||||
|
fy="25.149042"
|
||||||
|
r="19.571428" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4391">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop4393" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#002795;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop4395" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
r="19.571428"
|
||||||
|
fy="25.149042"
|
||||||
|
fx="48.645836"
|
||||||
|
cy="25.149042"
|
||||||
|
cx="48.645836"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient6546"
|
||||||
|
xlink:href="#linearGradient4391"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient6569"
|
||||||
|
id="radialGradient6567"
|
||||||
|
cx="8.9553537"
|
||||||
|
cy="44.946674"
|
||||||
|
fx="8.9553537"
|
||||||
|
fy="44.946674"
|
||||||
|
r="3.5705557"
|
||||||
|
gradientTransform="matrix(-0.94733236,-0.00407076,0.01580094,-3.3143438,17.05981,147.31969)"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient6569"
|
||||||
|
id="radialGradient6621"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(-0.94733236,-0.00407076,0.01580094,-3.3143438,17.05981,147.31969)"
|
||||||
|
cx="8.9553537"
|
||||||
|
cy="44.946674"
|
||||||
|
fx="8.9553537"
|
||||||
|
fy="44.946674"
|
||||||
|
r="3.5705557" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1600"
|
||||||
|
inkscape:window-height="824"
|
||||||
|
id="namedview5964"
|
||||||
|
showgrid="false"
|
||||||
|
showborder="true"
|
||||||
|
inkscape:zoom="8.2329346"
|
||||||
|
inkscape:cx="9.4830598"
|
||||||
|
inkscape:cy="31.197307"
|
||||||
|
inkscape:window-x="-2"
|
||||||
|
inkscape:window-y="53"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg5940" />
|
||||||
|
<g
|
||||||
|
id="g6611"
|
||||||
|
transform="matrix(1.0057818,0,0,1.0057818,-0.30889471,0.58721331)">
|
||||||
|
<path
|
||||||
|
id="Cut002_f0000"
|
||||||
|
d="m 5.2334517,17.209018 0,0 0,-17.58963669 0,0 0,17.58963669 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15921226;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut002_f0002"
|
||||||
|
d="m 5.2334517,-0.38061869 0,17.58963669 -1.1579605,0 0,-17.58963669 1.1579605,0 z"
|
||||||
|
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#191919;stroke-width:0.15921226;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut002_f0007"
|
||||||
|
d="m 13.339176,-0.38061869 0,17.58963669 -8.1057243,0 0,-17.58963669 8.1057243,0 z"
|
||||||
|
style="fill:url(#radialGradient6621);fill-opacity:1;fill-rule:evenodd;stroke:#191919;stroke-width:0.15921226;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut002_f0008"
|
||||||
|
d="m 13.339176,-0.41830416 a 1.1579605,1.0993523 0 0 0 1.15796,0 l 0,6.59611396 0,5.4967612 0,5.496762 a 1.1579605,1.0993523 0 0 0 -1.15796,0 l 0,-17.58963716 z"
|
||||||
|
style="fill:#5a96e4;fill-opacity:1;fill-rule:evenodd;stroke:#191919;stroke-width:0.15921226;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut002_f0010"
|
||||||
|
d="m 13.339176,12.811609 0,4.397409 1.15796,0 0,-4.397409 -1.15796,0 z"
|
||||||
|
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#191919;stroke-width:0.15921226;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut002_f0014"
|
||||||
|
d="m 13.339176,-0.38061869 0,5.49676159 1.15796,0 0,-5.49676159 -1.15796,0 z"
|
||||||
|
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#191919;stroke-width:0.15921226;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut002_f0017"
|
||||||
|
d="m 14.497136,12.811609 0,0 -1.15796,0 0,0 1.15796,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15921226;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut002_f0018"
|
||||||
|
d="m 13.339176,5.1161429 1.15796,0 0,0 -1.15796,0 0,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15921226;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.5 KiB |
198
src/Mod/Part/Gui/Resources/icons/Part_JoinEmbed.svg
Normal file
198
src/Mod/Part/Gui/Resources/icons/Part_JoinEmbed.svg
Normal file
|
@ -0,0 +1,198 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="64"
|
||||||
|
height="64"
|
||||||
|
viewBox="0 0 18.062222 18.062221"
|
||||||
|
version="1.1"
|
||||||
|
id="svg3042"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="Embed.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata3080">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs3078">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient5841"
|
||||||
|
osb:paint="solid">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#bf80ff;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop5843" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4391"
|
||||||
|
id="radialGradient3552"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
cx="48.645836"
|
||||||
|
cy="25.149042"
|
||||||
|
fx="48.645836"
|
||||||
|
fy="25.149042"
|
||||||
|
r="19.571428" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4391">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#71b2f8;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop4393" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#002795;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop4395" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4391"
|
||||||
|
id="radialGradient5919"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1,0,0,2.2603081,0,-10.296717)"
|
||||||
|
cx="4.6700001"
|
||||||
|
cy="8.1700001"
|
||||||
|
fx="4.6700001"
|
||||||
|
fy="8.1700001"
|
||||||
|
r="3.5705557" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4391"
|
||||||
|
id="radialGradient6607"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(-0.90118131,-4.2608786e-4,0.00142851,-3.0212961,9.1622386,40.335088)"
|
||||||
|
cx="4.8302736"
|
||||||
|
cy="13.504073"
|
||||||
|
fx="4.8302736"
|
||||||
|
fy="13.504073"
|
||||||
|
r="3.5705557" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1600"
|
||||||
|
inkscape:window-height="824"
|
||||||
|
id="namedview3076"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="8.1523184"
|
||||||
|
inkscape:cx="4.1676008"
|
||||||
|
inkscape:cy="33.30994"
|
||||||
|
inkscape:window-x="-2"
|
||||||
|
inkscape:window-y="53"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg3042" />
|
||||||
|
<g
|
||||||
|
id="g6623">
|
||||||
|
<path
|
||||||
|
id="Cut_f0000"
|
||||||
|
d="m 1.243156,17.847824 0,0 0,-17.6334271 0,0 0,17.6334271 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0002"
|
||||||
|
d="m 1.243156,0.2143969 0,17.6334271 -1.038394,0 0,-17.6334271 1.038394,0 z"
|
||||||
|
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0004"
|
||||||
|
d="m 8.511914,0.2143969 -7.268758,0 0,17.6334271 7.268758,0 0,-5.510446 -3.115182,0 0,-5.5104459 3.115182,0 0,-6.6125352 z"
|
||||||
|
style="fill:url(#radialGradient6607);fill-opacity:1;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095608999999999;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0005"
|
||||||
|
d="m 0.204762,0.2143969 0,17.6334271 0,0 0,-17.6334271 0,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0007"
|
||||||
|
d="m 8.511914,0.2143969 0,17.6334271 -7.268758,0 0,-17.6334271 7.268758,0 z"
|
||||||
|
style="fill:none;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0008"
|
||||||
|
d="m 8.511914,0.2143969 a 1.038394,1.1020892 0 0 0 1.038394,0 l 0,6.6125352 0,5.5104459 0,5.510446 a 1.038394,1.1020892 0 0 0 -1.038394,0 l 0,-17.6334271 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0009"
|
||||||
|
d="m 9.550308,13.439467 0,4.408357 0,0 0,-5.510446 a 1.038394,1.1020892 0 0 0 0,1.102089 l 0,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0010"
|
||||||
|
d="m 8.511914,13.439467 0,4.408357 1.038394,0 0,-4.408357 8.307152,0 0,-1.102089 -12.460728,0 0,1.102089 3.115182,0 z"
|
||||||
|
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0012"
|
||||||
|
d="m 8.511914,0.2143969 0,5.510446 0,0 a 1.038394,1.1020892 0 0 0 0,1.1020892 l 0,-6.6125352 0,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0013"
|
||||||
|
d="m 9.550308,0.2143969 0,0 0,5.510446 0,0 a 1.038394,1.1020892 0 0 0 0,1.1020892 l 0,-6.6125352 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0014"
|
||||||
|
d="m 8.511914,0.2143969 0,5.510446 -3.115182,0 0,1.1020892 12.460728,0 0,-1.1020892 -8.307152,0 0,-5.510446 -1.038394,0 z"
|
||||||
|
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0018"
|
||||||
|
d="m 9.550308,12.337378 0,-5.5104459 8.307152,0 0,5.5104459 -8.307152,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0019"
|
||||||
|
d="m 9.550308,13.439467 8.307152,0 0,0 -8.307152,0 0,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0022"
|
||||||
|
d="m 17.85746,12.337378 0,0 -12.460728,0 0,0 12.460728,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0024"
|
||||||
|
d="m 5.396732,5.7248429 0,0 3.115182,0 0,0 -3.115182,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0026"
|
||||||
|
d="m 9.550308,5.7248429 0,0 8.307152,0 0,0 -8.307152,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0027"
|
||||||
|
d="m 17.85746,6.8269321 0,0 -12.460728,0 0,0 12.460728,0 z"
|
||||||
|
style="fill:#c080ff;fill-rule:evenodd;stroke:#191919;stroke-width:0.15095609;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="Cut_f0028"
|
||||||
|
d="m 5.396732,6.8269321 0,5.5104459 12.460728,0 0,-5.5104459 -12.460728,0 z"
|
||||||
|
style="fill:#002795;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.15095609;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.3 KiB |
|
@ -67,6 +67,9 @@ Gui::MenuItem* Workbench::setupMenuBar() const
|
||||||
bop->setCommand("Boolean");
|
bop->setCommand("Boolean");
|
||||||
*bop << "Part_Boolean" << "Part_Cut" << "Part_Fuse" << "Part_Common";
|
*bop << "Part_Boolean" << "Part_Cut" << "Part_Fuse" << "Part_Common";
|
||||||
|
|
||||||
|
Gui::MenuItem* join = new Gui::MenuItem;
|
||||||
|
join->setCommand("Join");
|
||||||
|
*join << "Part_JoinConnect" << "Part_JoinEmbed" << "Part_JoinCutout";
|
||||||
|
|
||||||
Gui::MenuItem* part = new Gui::MenuItem;
|
Gui::MenuItem* part = new Gui::MenuItem;
|
||||||
root->insertItem(item, part);
|
root->insertItem(item, part);
|
||||||
|
@ -75,7 +78,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const
|
||||||
*part << prim << "Part_Primitives" << "Part_Builder" << "Separator"
|
*part << prim << "Part_Primitives" << "Part_Builder" << "Separator"
|
||||||
<< "Part_ShapeFromMesh" << "Part_MakeSolid" << "Part_ReverseShape"
|
<< "Part_ShapeFromMesh" << "Part_MakeSolid" << "Part_ReverseShape"
|
||||||
<< "Part_SimpleCopy" << "Part_RefineShape" << "Part_CheckGeometry"
|
<< "Part_SimpleCopy" << "Part_RefineShape" << "Part_CheckGeometry"
|
||||||
<< "Separator" << bop << "Separator"
|
<< "Separator" << bop << join << "Separator"
|
||||||
<< "Part_CrossSections" << "Part_Compound" << "Part_Extrude"
|
<< "Part_CrossSections" << "Part_Compound" << "Part_Extrude"
|
||||||
<< "Part_Revolve" << "Part_Mirror" << "Part_Fillet" << "Part_Chamfer"
|
<< "Part_Revolve" << "Part_Mirror" << "Part_Fillet" << "Part_Chamfer"
|
||||||
<< "Part_RuledSurface" << "Part_Loft" << "Part_Sweep"
|
<< "Part_RuledSurface" << "Part_Loft" << "Part_Sweep"
|
||||||
|
@ -120,7 +123,8 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
|
||||||
Gui::ToolBarItem* boolop = new Gui::ToolBarItem(root);
|
Gui::ToolBarItem* boolop = new Gui::ToolBarItem(root);
|
||||||
boolop->setCommand("Boolean");
|
boolop->setCommand("Boolean");
|
||||||
*boolop << "Part_Boolean" << "Part_Cut" << "Part_Fuse" << "Part_Common"
|
*boolop << "Part_Boolean" << "Part_Cut" << "Part_Fuse" << "Part_Common"
|
||||||
<< "Part_CheckGeometry" << "Part_Section" << "Part_CrossSections";
|
<< "Part_CompJoinFeatures" << "Part_CheckGeometry" << "Part_Section"
|
||||||
|
<< "Part_CrossSections";
|
||||||
|
|
||||||
Gui::ToolBarItem* measure = new Gui::ToolBarItem(root);
|
Gui::ToolBarItem* measure = new Gui::ToolBarItem(root);
|
||||||
measure->setCommand("Measure");
|
measure->setCommand("Measure");
|
||||||
|
|
|
@ -32,8 +32,8 @@
|
||||||
|
|
||||||
|
|
||||||
class PartWorkbench ( Workbench ):
|
class PartWorkbench ( Workbench ):
|
||||||
"Part workbench object"
|
"Part workbench object"
|
||||||
Icon = """
|
Icon = """
|
||||||
/* XPM */
|
/* XPM */
|
||||||
static char * part_xpm[] = {
|
static char * part_xpm[] = {
|
||||||
"16 16 9 1",
|
"16 16 9 1",
|
||||||
|
@ -62,15 +62,20 @@ class PartWorkbench ( Workbench ):
|
||||||
".@$%&****%.%.. ",
|
".@$%&****%.%.. ",
|
||||||
" ......@##.. ",
|
" ......@##.. ",
|
||||||
" ... "};
|
" ... "};
|
||||||
"""
|
"""
|
||||||
MenuText = "Part"
|
MenuText = "Part"
|
||||||
ToolTip = "Part workbench"
|
ToolTip = "Part workbench"
|
||||||
|
|
||||||
def Initialize(self):
|
def Initialize(self):
|
||||||
# load the module
|
# load the module
|
||||||
import PartGui
|
import PartGui
|
||||||
import Part
|
import Part
|
||||||
def GetClassName(self):
|
try:
|
||||||
return "PartGui::Workbench"
|
import JoinFeatures
|
||||||
|
except ImportError:
|
||||||
|
print "JoinFeatures module cannot be loaded"
|
||||||
|
|
||||||
|
def GetClassName(self):
|
||||||
|
return "PartGui::Workbench"
|
||||||
|
|
||||||
Gui.addWorkbench(PartWorkbench())
|
Gui.addWorkbench(PartWorkbench())
|
||||||
|
|
260
src/Mod/Part/JoinFeatures.py
Normal file
260
src/Mod/Part/JoinFeatures.py
Normal file
|
@ -0,0 +1,260 @@
|
||||||
|
#***************************************************************************
|
||||||
|
#* *
|
||||||
|
#* Copyright (c) 2015 - Victor Titov (DeepSOIC) *
|
||||||
|
#* <vv.titov@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, Part
|
||||||
|
|
||||||
|
if FreeCAD.GuiUp:
|
||||||
|
import FreeCADGui
|
||||||
|
from PySide import QtCore, QtGui
|
||||||
|
|
||||||
|
__title__="JoinFeatures module"
|
||||||
|
__author__ = "DeepSOIC"
|
||||||
|
__url__ = "http://www.freecadweb.org"
|
||||||
|
|
||||||
|
#-------------------------- translation-related code ----------------------------------------
|
||||||
|
#Thanks, yorik! (see forum thread "A new Part tool is being born... JoinFeatures!"
|
||||||
|
#http://forum.freecadweb.org/viewtopic.php?f=22&t=11112&start=30#p90239 )
|
||||||
|
try:
|
||||||
|
_fromUtf8 = QtCore.QString.fromUtf8
|
||||||
|
except AttributeError:
|
||||||
|
def _fromUtf8(s):
|
||||||
|
return s
|
||||||
|
try:
|
||||||
|
_encoding = QtGui.QApplication.UnicodeUTF8
|
||||||
|
def _translate(context, text, disambig):
|
||||||
|
return QtGui.QApplication.translate(context, text, disambig, _encoding)
|
||||||
|
except AttributeError:
|
||||||
|
def _translate(context, text, disambig):
|
||||||
|
return QtGui.QApplication.translate(context, text, disambig)
|
||||||
|
#--------------------------/translation-related code ----------------------------------------
|
||||||
|
|
||||||
|
# -------------------------- common stuff --------------------------------------------------
|
||||||
|
def getParamRefine():
|
||||||
|
return FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Part/Boolean").GetBool("RefineModel")
|
||||||
|
|
||||||
|
def shapeOfMaxVol(compound):
|
||||||
|
if compound.ShapeType == 'Compound':
|
||||||
|
maxVol = 0
|
||||||
|
cntEq = 0
|
||||||
|
shMax = None
|
||||||
|
for sh in compound.childShapes():
|
||||||
|
v = sh.Volume
|
||||||
|
if v > maxVol + 1e-8 :
|
||||||
|
maxVol = v
|
||||||
|
shMax = sh
|
||||||
|
cntEq = 1
|
||||||
|
elif abs(v - maxVol) <= 1e-8 :
|
||||||
|
cntEq = cntEq + 1
|
||||||
|
if cntEq > 1 :
|
||||||
|
raise ValueError("Equal volumes, can't figure out what to cut off!")
|
||||||
|
return shMax
|
||||||
|
else:
|
||||||
|
return compound
|
||||||
|
|
||||||
|
def makePartJoinFeature(name, mode = 'bypass'):
|
||||||
|
'''makePartJoinFeature(name, mode = 'bypass'): makes an PartJoinFeature object.'''
|
||||||
|
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython",name)
|
||||||
|
_PartJoinFeature(obj)
|
||||||
|
obj.Mode = mode
|
||||||
|
obj.Refine = getParamRefine()
|
||||||
|
_ViewProviderPartJoinFeature(obj.ViewObject)
|
||||||
|
return obj
|
||||||
|
|
||||||
|
class _PartJoinFeature:
|
||||||
|
"The PartJoinFeature object"
|
||||||
|
def __init__(self,obj):
|
||||||
|
self.Type = "PartJoinFeature"
|
||||||
|
obj.addProperty("App::PropertyEnumeration","Mode","Join","The mode of operation. bypass = make compound (fast)")
|
||||||
|
obj.Mode = ['bypass','Connect','Embed','Cutout']
|
||||||
|
obj.addProperty("App::PropertyLink","Base","Join","First object")
|
||||||
|
obj.addProperty("App::PropertyLink","Tool","Join","Second object")
|
||||||
|
obj.addProperty("App::PropertyBool","Refine","Join","True = refine resulting shape. False = output as is.")
|
||||||
|
|
||||||
|
obj.Proxy = self
|
||||||
|
|
||||||
|
|
||||||
|
def execute(self,obj):
|
||||||
|
rst = None
|
||||||
|
if obj.Mode == 'bypass':
|
||||||
|
rst = Part.makeCompound([obj.Base.Shape, obj.Tool.Shape])
|
||||||
|
else:
|
||||||
|
cut1 = obj.Base.Shape.cut(obj.Tool.Shape)
|
||||||
|
cut1 = shapeOfMaxVol(cut1)
|
||||||
|
if obj.Mode == 'Connect':
|
||||||
|
cut2 = obj.Tool.Shape.cut(obj.Base.Shape)
|
||||||
|
cut2 = shapeOfMaxVol(cut2)
|
||||||
|
rst = cut1.multiFuse([cut2, obj.Tool.Shape.common(obj.Base.Shape)])
|
||||||
|
elif obj.Mode == 'Embed':
|
||||||
|
rst = cut1.fuse(obj.Tool.Shape)
|
||||||
|
elif obj.Mode == 'Cutout':
|
||||||
|
rst = cut1
|
||||||
|
if obj.Refine:
|
||||||
|
rst = rst.removeSplitter()
|
||||||
|
obj.Shape = rst
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
class _ViewProviderPartJoinFeature:
|
||||||
|
"A View Provider for the PartJoinFeature object"
|
||||||
|
|
||||||
|
def __init__(self,vobj):
|
||||||
|
vobj.Proxy = self
|
||||||
|
|
||||||
|
def getIcon(self):
|
||||||
|
if self.Object == None:
|
||||||
|
return getIconPath("Part_JoinConnect.svg")
|
||||||
|
else:
|
||||||
|
return getIconPath( {
|
||||||
|
'bypass':"Part_JoinBypass.svg",
|
||||||
|
'Connect':"Part_JoinConnect.svg",
|
||||||
|
'Embed':"Part_JoinEmbed.svg",
|
||||||
|
'Cutout':"Part_JoinCutout.svg",
|
||||||
|
}[self.Object.Mode] )
|
||||||
|
|
||||||
|
def attach(self, vobj):
|
||||||
|
self.ViewObject = vobj
|
||||||
|
self.Object = vobj.Object
|
||||||
|
|
||||||
|
|
||||||
|
def setEdit(self,vobj,mode):
|
||||||
|
return False
|
||||||
|
|
||||||
|
def unsetEdit(self,vobj,mode):
|
||||||
|
return
|
||||||
|
|
||||||
|
def __getstate__(self):
|
||||||
|
return None
|
||||||
|
|
||||||
|
def __setstate__(self,state):
|
||||||
|
return None
|
||||||
|
|
||||||
|
def CreateJoinFeature(name, mode):
|
||||||
|
FreeCAD.ActiveDocument.openTransaction("Create "+mode+"ObjectsFeature")
|
||||||
|
FreeCADGui.addModule("JoinFeatures")
|
||||||
|
FreeCADGui.doCommand("j = JoinFeatures.makePartJoinFeature(name = '"+name+"', mode = '"+mode+"' )")
|
||||||
|
FreeCADGui.doCommand("j.Base = FreeCADGui.Selection.getSelection()[0]")
|
||||||
|
FreeCADGui.doCommand("j.Tool = FreeCADGui.Selection.getSelection()[1]")
|
||||||
|
FreeCADGui.doCommand("j.Proxy.execute(j)")
|
||||||
|
FreeCADGui.doCommand("j.purgeTouched()")
|
||||||
|
FreeCADGui.doCommand("j.Base.ViewObject.hide()")
|
||||||
|
FreeCADGui.doCommand("j.Tool.ViewObject.hide()")
|
||||||
|
FreeCAD.ActiveDocument.commitTransaction()
|
||||||
|
|
||||||
|
def getIconPath(icon_dot_svg):
|
||||||
|
return ":/icons/" + icon_dot_svg
|
||||||
|
|
||||||
|
# -------------------------- /common stuff --------------------------------------------------
|
||||||
|
|
||||||
|
# -------------------------- ConnectObjectsFeature --------------------------------------------------
|
||||||
|
|
||||||
|
class _CommandConnectFeature:
|
||||||
|
"Command to create PartJoinFeature in Connect mode"
|
||||||
|
def GetResources(self):
|
||||||
|
return {'Pixmap' : getIconPath("Part_JoinConnect.svg"),
|
||||||
|
'MenuText': QtCore.QT_TRANSLATE_NOOP("Part_ConnectFeature","Connect objects"),
|
||||||
|
'Accel': "",
|
||||||
|
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Part_ConnectFeature","Fuses objects, taking care to preserve voids.")}
|
||||||
|
|
||||||
|
def Activated(self):
|
||||||
|
if len(FreeCADGui.Selection.getSelection()) == 2 :
|
||||||
|
CreateJoinFeature(name = "Connect", mode = "Connect")
|
||||||
|
else:
|
||||||
|
mb = QtGui.QMessageBox()
|
||||||
|
mb.setIcon(mb.Icon.Warning)
|
||||||
|
mb.setText(_translate("Part_JoinFeatures", "Two solids need to be selected, first!", None))
|
||||||
|
mb.setWindowTitle(_translate("Part_JoinFeatures","Bad selection", None))
|
||||||
|
mb.exec_()
|
||||||
|
|
||||||
|
def IsActive(self):
|
||||||
|
if FreeCAD.ActiveDocument:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
FreeCADGui.addCommand('Part_JoinConnect',_CommandConnectFeature())
|
||||||
|
|
||||||
|
# -------------------------- /ConnectObjectsFeature --------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
# -------------------------- EmbedFeature --------------------------------------------------
|
||||||
|
|
||||||
|
class _CommandEmbedFeature:
|
||||||
|
"Command to create PartJoinFeature in Embed mode"
|
||||||
|
def GetResources(self):
|
||||||
|
return {'Pixmap' : getIconPath("Part_JoinEmbed.svg"),
|
||||||
|
'MenuText': QtCore.QT_TRANSLATE_NOOP("Part_EmbedFeature","Embed object"),
|
||||||
|
'Accel': "",
|
||||||
|
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Part_EmbedFeature","Fuses one object into another, taking care to preserve voids.")}
|
||||||
|
|
||||||
|
def Activated(self):
|
||||||
|
if len(FreeCADGui.Selection.getSelection()) == 2 :
|
||||||
|
CreateJoinFeature(name = "Embed", mode = "Embed")
|
||||||
|
else:
|
||||||
|
mb = QtGui.QMessageBox()
|
||||||
|
mb.setIcon(mb.Icon.Warning)
|
||||||
|
mb.setText(_translate("Part_JoinFeatures","Select base object, then the object to embed, and invoke this tool.", None))
|
||||||
|
mb.setWindowTitle(_translate("Part_JoinFeatures","Bad selection", None))
|
||||||
|
mb.exec_()
|
||||||
|
|
||||||
|
|
||||||
|
def IsActive(self):
|
||||||
|
if FreeCAD.ActiveDocument:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
FreeCADGui.addCommand('Part_JoinEmbed',_CommandEmbedFeature())
|
||||||
|
|
||||||
|
# -------------------------- /EmbedFeature --------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# -------------------------- CutoutFeature --------------------------------------------------
|
||||||
|
|
||||||
|
class _CommandCutoutFeature:
|
||||||
|
"Command to create PartJoinFeature in Cutout mode"
|
||||||
|
def GetResources(self):
|
||||||
|
return {'Pixmap' : getIconPath("Part_JoinCutout.svg"),
|
||||||
|
'MenuText': QtCore.QT_TRANSLATE_NOOP("Part_CutoutFeature","Cutout for object"),
|
||||||
|
'Accel': "",
|
||||||
|
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Part_CutoutFeature","Makes a cutout in one object to fit another object.")}
|
||||||
|
|
||||||
|
def Activated(self):
|
||||||
|
if len(FreeCADGui.Selection.getSelection()) == 2 :
|
||||||
|
CreateJoinFeature(name = "Cutout", mode = "Cutout")
|
||||||
|
else:
|
||||||
|
mb = QtGui.QMessageBox()
|
||||||
|
mb.setIcon(mb.Icon.Warning)
|
||||||
|
mb.setText(_translate("Part_JoinFeatures","Select the object to make a cutout in, then the object that should fit into the cutout, and invoke this tool.", None))
|
||||||
|
mb.setWindowTitle(_translate("Part_JoinFeatures","Bad selection", None))
|
||||||
|
mb.exec_()
|
||||||
|
|
||||||
|
def IsActive(self):
|
||||||
|
if FreeCAD.ActiveDocument:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
FreeCADGui.addCommand('Part_JoinCutout',_CommandCutoutFeature())
|
||||||
|
|
||||||
|
# -------------------------- /CutoutFeature --------------------------------------------------
|
Loading…
Reference in New Issue
Block a user