Merge branch 'master' into fanuc-1st-pass

This commit is contained in:
Tyler Colbert
2021-01-21 18:24:19 -07:00
committed by GitHub
19 changed files with 2723 additions and 301 deletions

View File

@@ -50,6 +50,12 @@ if(NOT FREECAD_LIBPACK_USE OR FREECAD_LIBPACK_CHECKFILE_CLBUNDLER)
find_package(ZLIB REQUIRED)
find_package(PyCXX REQUIRED)
SetupOpenCasCade()
if(BUILD_GUI)
# Do this before the check for SMESH because it depends on vtk
# that may have its own OpenGL check but possibly fails and leaves
# OPENGL_gl_LIBRARY empty that results into linker errors
SetupOpenGL()
endif(BUILD_GUI)
SetupSalomeSMESH()
if (BUILD_FEM_NETGEN)
find_package(NETGEN)
@@ -64,7 +70,6 @@ if(NOT FREECAD_LIBPACK_USE OR FREECAD_LIBPACK_CHECKFILE_CLBUNDLER)
SetupFreetype()
if(BUILD_GUI)
SetupOpenGL()
SetupCoin3D()
SetupSpaceball()
SetupShibokenAndPyside()

View File

@@ -163,6 +163,7 @@ macro(PrintFinalReport)
message(STATUS "Freetype: disabled")
endif(FREECAD_USE_FREETYPE)
message(STATUS "OpenGL: ${OPENGL_gl_LIBRARY}")
message(STATUS "OpenGLU: ${OPENGL_glu_LIBRARY} [${OPENGL_glu_LIBRARY}][${OPENGL_INCLUDE_DIR}]")
message(STATUS "Coin3D: [${COIN3D_LIBRARIES}] [${COIN3D_INCLUDE_DIRS}]")

View File

@@ -531,6 +531,7 @@ void WorkbenchComboBox::onWorkbenchActivated(const QString& name)
WorkbenchGroup::WorkbenchGroup ( Command* pcCmd, QObject * parent )
: ActionGroup( pcCmd, parent )
{
// Start a list with 50 elements but extend it when requested
for (int i=0; i<50; i++) {
QAction* action = _group->addAction(QLatin1String(""));
action->setVisible(false);
@@ -590,7 +591,7 @@ void WorkbenchGroup::refreshWorkbenchList()
QStringList items = Application::Instance->workbenches();
QStringList enabled_wbs_list = DlgWorkbenchesImp::load_enabled_workbenches();
QStringList disabled_wbs_list = DlgWorkbenchesImp::load_disabled_workbenches();
int i=0;
QStringList enable_wbs;
// Go through the list of enabled workbenches and verify that they really exist because
// it might be possible that a workbench has been removed after setting up the list of
@@ -598,7 +599,7 @@ void WorkbenchGroup::refreshWorkbenchList()
for (QStringList::Iterator it = enabled_wbs_list.begin(); it != enabled_wbs_list.end(); ++it) {
int index = items.indexOf(*it);
if (index >= 0) {
setWorkbenchData(i++, *it);
enable_wbs << *it;
items.removeAt(index);
}
}
@@ -613,8 +614,22 @@ void WorkbenchGroup::refreshWorkbenchList()
// Now add the remaining workbenches of 'items'. They have been added to the application
// after setting up the list of enabled workbenches.
for (QStringList::Iterator it = items.begin(); it != items.end(); ++it) {
setWorkbenchData(i++, *it);
enable_wbs.append(items);
QList<QAction*> workbenches = _group->actions();
int numActions = workbenches.size();
int extend = enable_wbs.size() - numActions;
if (extend > 0) {
for (int i=0; i<extend; i++) {
QAction* action = _group->addAction(QLatin1String(""));
action->setCheckable(true);
action->setData(QVariant(numActions++)); // set the index
}
}
// Show all enabled wb
int index = 0;
for (QStringList::Iterator it = enable_wbs.begin(); it != enable_wbs.end(); ++it) {
setWorkbenchData(index++, *it);
}
}
@@ -633,21 +648,31 @@ void WorkbenchGroup::slotActivateWorkbench(const char* /*name*/)
void WorkbenchGroup::slotAddWorkbench(const char* name)
{
QList<QAction*> workbenches = _group->actions();
QAction* action = nullptr;
for (QList<QAction*>::Iterator it = workbenches.begin(); it != workbenches.end(); ++it) {
if (!(*it)->isVisible()) {
QString wb = QString::fromLatin1(name);
QPixmap px = Application::Instance->workbenchIcon(wb);
QString text = Application::Instance->workbenchMenuText(wb);
QString tip = Application::Instance->workbenchToolTip(wb);
(*it)->setIcon(px);
(*it)->setObjectName(wb);
(*it)->setText(text);
(*it)->setToolTip(tip);
(*it)->setStatusTip(tr("Select the '%1' workbench").arg(wb));
(*it)->setVisible(true); // do this at last
action = *it;
break;
}
}
if (!action) {
int index = workbenches.size();
action = _group->addAction(QLatin1String(""));
action->setCheckable(true);
action->setData(QVariant(index)); // set the index
}
QString wb = QString::fromLatin1(name);
QPixmap px = Application::Instance->workbenchIcon(wb);
QString text = Application::Instance->workbenchMenuText(wb);
QString tip = Application::Instance->workbenchToolTip(wb);
action->setIcon(px);
action->setObjectName(wb);
action->setText(text);
action->setToolTip(tip);
action->setStatusTip(tr("Select the '%1' workbench").arg(wb));
action->setVisible(true); // do this at last
}
void WorkbenchGroup::slotRemoveWorkbench(const char* name)

View File

@@ -438,8 +438,9 @@ class _Roof(ArchComponent.Component):
rel = profilCurr["idrel"]
if i != rel and 0 <= rel < numEdges:
profilRel = self.profilsDico[rel]
# do not use data from the relative profile if it in turn references a relative profile:
if 0 <= profilRel["idrel"] < numEdges:
# do not use data from the relative profile if it in turn references a relative profile
# other than itself:
if 0 <= profilRel["idrel"] < numEdges and rel != profilRel["idrel"]:
hgt = self.calcHeight(i)
profilCurr["height"] = hgt
elif ang == 0.0 and run == 0.0:

View File

@@ -629,19 +629,64 @@ std::set<long> FemMesh::getSurfaceNodes(long /*ElemId*/, short /*FaceId*/, float
*/
std::list<std::pair<int, int> > FemMesh::getVolumesByFace(const TopoDS_Face &face) const
{
//TODO: This function is broken with SMESH7 as it is impossible to iterate volume faces
std::list<std::pair<int, int> > result;
std::set<int> nodes_on_face = getNodesByFace(face);
#if SMESH_VERSION_MAJOR >= 7
// SMDS_MeshVolume::facesIterator() is broken with SMESH7 as it is impossible to iterate volume faces
// In SMESH9 this function has been removed
//
std::map< int, std::set<int> > face_nodes;
// get faces that contribute to 'nodes_on_face' with all of its nodes
SMDS_FaceIteratorPtr face_iter = myMesh->GetMeshDS()->facesIterator();
while (face_iter && face_iter->more()) {
const SMDS_MeshFace* face = face_iter->next();
SMDS_NodeIteratorPtr node_iter = face->nodeIterator();
// all nodes of the current face must be part of 'nodes_on_face'
std::set<int> node_ids;
while (node_iter && node_iter->more()) {
const SMDS_MeshNode* node = node_iter->next();
node_ids.insert(node->GetID());
}
std::vector<int> element_face_nodes;
std::set_intersection(nodes_on_face.begin(), nodes_on_face.end(), node_ids.begin(), node_ids.end(),
std::back_insert_iterator<std::vector<int> >(element_face_nodes));
if (element_face_nodes.size() == node_ids.size()) {
face_nodes[face->GetID()] = node_ids;
}
}
// get all nodes of a volume and check which faces contribute to it with all of its nodes
SMDS_VolumeIteratorPtr vol_iter = myMesh->GetMeshDS()->volumesIterator();
while (vol_iter->more()) {
const SMDS_MeshVolume* vol = vol_iter->next();
#if SMESH_VERSION_MAJOR >= 9
throw Base::NotImplementedError("Port FemMesh::getVolumesByFace to smesh >= 9.x");
SMDS_ElemIteratorPtr face_iter = nullptr; //TODO:
SMDS_NodeIteratorPtr node_iter = vol->nodeIterator();
std::set<int> node_ids;
while (node_iter && node_iter->more()) {
const SMDS_MeshNode* node = node_iter->next();
node_ids.insert(node->GetID());
}
for (const auto& it : face_nodes) {
std::vector<int> element_face_nodes;
std::set_intersection(node_ids.begin(), node_ids.end(), it.second.begin(), it.second.end(),
std::back_insert_iterator<std::vector<int> >(element_face_nodes));
// For curved faces it is possible that a volume contributes more than one face
if (element_face_nodes.size() == it.second.size()) {
result.emplace_back(vol->GetID(), it.first);
}
}
}
#else
SMDS_VolumeIteratorPtr vol_iter = myMesh->GetMeshDS()->volumesIterator();
while (vol_iter->more()) {
const SMDS_MeshVolume* vol = vol_iter->next();
SMDS_ElemIteratorPtr face_iter = vol->facesIterator();
#endif
while (face_iter && face_iter->more()) {
const SMDS_MeshFace* face = static_cast<const SMDS_MeshFace*>(face_iter->next());
@@ -662,6 +707,7 @@ std::list<std::pair<int, int> > FemMesh::getVolumesByFace(const TopoDS_Face &fac
}
}
}
#endif
result.sort();
return result;

View File

@@ -1,6 +1,4 @@
<?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#"
@@ -8,82 +6,428 @@
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"
version="1.1"
id="svg2"
width="68.26667"
height="68.26667"
viewBox="0 0 68.26667 68.26667"
sodipodi:docname="OpenSCAD_MirrorMeshFeature.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
width="64px"
height="64px"
id="svg3364"
version="1.1">
<title
id="title915">OpenSCAD_MirrorMeshFeature</title>
<defs
id="defs3366">
<linearGradient
id="linearGradient916">
<stop
id="stop912"
offset="0"
style="stop-color:#8ae234;stop-opacity:1" />
<stop
id="stop914"
offset="1"
style="stop-color:#4e9a06;stop-opacity:1" />
</linearGradient>
<linearGradient
id="linearGradient3885">
<stop
id="stop3887"
offset="0"
style="stop-color:#8ae234;stop-opacity:1" />
<stop
id="stop3889"
offset="1"
style="stop-color:#4e9a06;stop-opacity:1" />
</linearGradient>
<linearGradient
id="linearGradient3833">
<stop
style="stop-color:#729fcf;stop-opacity:1;"
offset="0"
id="stop3835" />
<stop
style="stop-color:#3465a4;stop-opacity:1"
offset="1"
id="stop3837" />
</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>
<radialGradient
xlink:href="#linearGradient3864"
id="radialGradient2571"
gradientUnits="userSpaceOnUse"
cx="342.58258"
cy="27.256668"
fx="342.58258"
fy="27.256668"
r="19.571428"
gradientTransform="matrix(1.6258409,0.5434973,-8.8819886e-2,0.2656996,-215.02413,-170.90186)" />
<radialGradient
xlink:href="#linearGradient3593"
id="radialGradient3352"
gradientUnits="userSpaceOnUse"
cx="345.28433"
cy="15.560534"
fx="345.28433"
fy="15.560534"
r="19.571428"
gradientTransform="translate(-0.1767767,-2.6516504)" />
<linearGradient
id="linearGradient3593">
<stop
style="stop-color:#c8e0f9;stop-opacity:1;"
offset="0"
id="stop3595" />
<stop
style="stop-color:#637dca;stop-opacity:1;"
offset="1"
id="stop3597" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient3593"
id="radialGradient3354"
gradientUnits="userSpaceOnUse"
cx="330.63791"
cy="39.962704"
fx="330.63791"
fy="39.962704"
r="19.571428"
gradientTransform="translate(-0.1767767,-2.6516504)" />
<radialGradient
xlink:href="#linearGradient3864"
id="radialGradient3369"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.6258409,0.5434973,-8.8819886e-2,0.2656996,-461.81066,-173.06271)"
cx="342.58258"
cy="27.256668"
fx="342.58258"
fy="27.256668"
r="19.571428" />
<linearGradient
id="linearGradient3864-4">
<stop
id="stop3866-5"
offset="0"
style="stop-color:#71b2f8;stop-opacity:1;" />
<stop
id="stop3868-2"
offset="1"
style="stop-color:#002795;stop-opacity:1;" />
</linearGradient>
<radialGradient
r="19.571428"
fy="113.23357"
fx="320.44025"
cy="113.23357"
cx="320.44025"
gradientTransform="matrix(0.9829174,1.3240854,-1.2330051,0.8105158,-138.75617,-494.52855)"
gradientUnits="userSpaceOnUse"
id="radialGradient3036"
xlink:href="#linearGradient3864-4" />
<radialGradient
xlink:href="#linearGradient3864-6"
id="radialGradient3007-9"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9829174,1.3240854,-1.2330051,0.8105158,-189.40979,-484.51702)"
cx="320.44025"
cy="113.23357"
fx="320.44025"
fy="113.23357"
r="19.571428" />
<linearGradient
id="linearGradient3864-6">
<stop
id="stop3866-0"
offset="0"
style="stop-color:#71b2f8;stop-opacity:1;" />
<stop
id="stop3868-9"
offset="1"
style="stop-color:#002795;stop-opacity:1;" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient3864-1"
id="radialGradient3960"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.2993671,-0.01575726,0.0084161,0.9850979,-94.354208,-10.998387)"
cx="48.288067"
cy="46.74614"
fx="48.288067"
fy="46.74614"
r="19.571428" />
<linearGradient
id="linearGradient3864-1">
<stop
id="stop3866-9"
offset="0"
style="stop-color:#71b2f8;stop-opacity:1;" />
<stop
id="stop3868-0"
offset="1"
style="stop-color:#002795;stop-opacity:1;" />
</linearGradient>
<radialGradient
r="19.571428"
fy="32.799232"
fx="41.803806"
cy="32.799232"
cx="41.803806"
gradientTransform="matrix(-0.70352355,2.1948421,-1.0402627,-0.30894741,102.4266,-56.052881)"
gradientUnits="userSpaceOnUse"
id="radialGradient3986-4"
xlink:href="#linearGradient3864-1-9" />
<linearGradient
id="linearGradient3864-1-9">
<stop
id="stop3866-9-6"
offset="0"
style="stop-color:#71b2f8;stop-opacity:1;" />
<stop
id="stop3868-0-6"
offset="1"
style="stop-color:#002795;stop-opacity:1;" />
</linearGradient>
<radialGradient
r="19.571428"
fy="46.74614"
fx="48.288067"
cy="46.74614"
cx="48.288067"
gradientTransform="matrix(0.01575726,2.2993671,-0.9850979,0.0084161,52.182614,-97.493771)"
gradientUnits="userSpaceOnUse"
id="radialGradient4024"
xlink:href="#linearGradient3864-1-9" />
<radialGradient
xlink:href="#linearGradient3593-5"
id="radialGradient3966"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9327663,0,0,0.9327663,-298.15651,8.1913381)"
cx="330.63791"
cy="39.962704"
fx="330.63791"
fy="39.962704"
r="19.571428" />
<linearGradient
id="linearGradient3593-5">
<stop
style="stop-color:#c8e0f9;stop-opacity:1;"
offset="0"
id="stop3595-2" />
<stop
style="stop-color:#637dca;stop-opacity:1;"
offset="1"
id="stop3597-5" />
</linearGradient>
<radialGradient
r="19.571428"
fy="6.0560789"
fx="374.42535"
cy="6.0560789"
cx="374.42535"
gradientTransform="matrix(0.52013132,0.80077671,-0.81763607,0.49523365,-185.59014,-277.02153)"
gradientUnits="userSpaceOnUse"
id="radialGradient4061-4"
xlink:href="#linearGradient3593-5-4" />
<linearGradient
id="linearGradient3593-5-4">
<stop
style="stop-color:#c8e0f9;stop-opacity:1;"
offset="0"
id="stop3595-2-8" />
<stop
style="stop-color:#637dca;stop-opacity:1;"
offset="1"
id="stop3597-5-4" />
</linearGradient>
<radialGradient
r="19.571428"
fy="39.962704"
fx="330.63791"
cy="39.962704"
cx="330.63791"
gradientTransform="matrix(0.9327663,0,0,0.9327663,-302.00666,-27.942952)"
gradientUnits="userSpaceOnUse"
id="radialGradient4099"
xlink:href="#linearGradient3593-5-4" />
<linearGradient
id="linearGradient3864-1-9-2">
<stop
id="stop3866-9-6-6"
offset="0"
style="stop-color:#71b2f8;stop-opacity:1;" />
<stop
id="stop3868-0-6-8"
offset="1"
style="stop-color:#002795;stop-opacity:1;" />
</linearGradient>
<radialGradient
r="19.571428"
fy="6.0560789"
fx="374.42535"
cy="6.0560789"
cx="374.42535"
gradientTransform="matrix(0.52013132,0.80077671,-0.81763607,0.49523365,-185.59014,-276.99255)"
gradientUnits="userSpaceOnUse"
id="radialGradient4061-4-8"
xlink:href="#linearGradient3593-5-4-9" />
<linearGradient
id="linearGradient3593-5-4-9">
<stop
style="stop-color:#c8e0f9;stop-opacity:1;"
offset="0"
id="stop3595-2-8-8" />
<stop
style="stop-color:#637dca;stop-opacity:1;"
offset="1"
id="stop3597-5-4-8" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3833"
id="linearGradient3839"
x1="90"
y1="17"
x2="93"
y2="47"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-40,60)" />
<linearGradient
xlink:href="#linearGradient3833-7"
id="linearGradient3839-6"
x1="90"
y1="17"
x2="93"
y2="47"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-40,60)" />
<linearGradient
id="linearGradient3833-7">
<stop
style="stop-color:#729fcf;stop-opacity:1;"
offset="0"
id="stop3835-5" />
<stop
style="stop-color:#3465a4;stop-opacity:1"
offset="1"
id="stop3837-3" />
</linearGradient>
<linearGradient
y2="42"
x2="86"
y1="17"
x1="90"
gradientTransform="matrix(-1,0,0,1,104,0)"
gradientUnits="userSpaceOnUse"
id="linearGradient3862"
xlink:href="#linearGradient3885" />
<linearGradient
xlink:href="#linearGradient916"
id="linearGradient3893"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-40)"
x1="90"
y1="17"
x2="93"
y2="47" />
</defs>
<metadata
id="metadata8">
id="metadata3369">
<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>
<dc:title>OpenSCAD_MirrorMeshFeature</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>[bitacovir]</dc:title>
</cc:Agent>
</dc:creator>
<dc:title>Part_Mirror</dc:title>
<dc:date>2021/01/05</dc:date>
<dc:relation>http://www.freecadweb.org/wiki/index.php?title=Artwork</dc:relation>
<dc:publisher>
<cc:Agent>
<dc:title>FreeCAD</dc:title>
</cc:Agent>
</dc:publisher>
<dc:identifier></dc:identifier>
<dc:rights>
<cc:Agent>
<dc:title>FreeCAD LGPL2+</dc:title>
</cc:Agent>
</dc:rights>
<cc:license>https://www.gnu.org/copyleft/lesser.html</cc:license>
<dc:contributor>
<cc:Agent>
<dc:title>Work based on a design made by [agryson] Alexander Gryson</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="790"
inkscape:window-height="480"
id="namedview4"
showgrid="false"
inkscape:zoom="3.4570311"
inkscape:cx="34.133335"
inkscape:cy="34.133335"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<image
width="68.26667"
height="68.26667"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
"
id="image10"
x="0"
y="0" />
<g
id="layer1">
<g
id="g3922">
<path
style="fill:#8ae234;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
d="M 41,9 61,19 V 55 L 41,43 Z"
id="path3045" />
<path
style="fill:url(#linearGradient3893);fill-opacity:1;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 43,12.2 16,8 V 51.5 L 43,41.9 Z"
id="path3045-3" />
<path
style="fill:#8ae234;stroke:#172a04;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
d="M 23,9 3,19 V 55 L 23,43 Z"
id="path3045-6" />
<path
style="fill:url(#linearGradient3862);fill-opacity:1;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 21,12.2 -16,8 v 31.3 l 16,-9.6 z"
id="path3045-3-2" />
<path
style="fill:none;stroke:#280000;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:8, 16;stroke-dashoffset:2;stroke-opacity:1"
d="M 32,5.9999998 V 58"
id="path3891" />
<path
style="fill:none;stroke:#cc0000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:8, 16;stroke-dashoffset:2;stroke-opacity:1"
d="M 32,6 V 58"
id="path3891-9" />
<path
style="fill:none;stroke:#ef2929;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:8, 16;stroke-dashoffset:2;stroke-opacity:1"
d="m 31,5.7 v 52"
id="path3891-9-1" />
<path
style="fill:none;stroke:#172a04;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 23,10 4,54"
id="path918" />
<path
style="fill:none;stroke:#172a04;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 41,10 61,55"
id="path920" />
<path
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 8,50 21,20"
id="path922" />
<path
id="path922-9"
d="M 5.0935052,46.374021 19,14"
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 43.012401,19.729601 56.570656,50.165549"
id="path939" />
<path
id="path939-4"
d="M 44.695494,13.067355 59.001791,45.560417"
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -1,6 +1,4 @@
<?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#"
@@ -8,99 +6,282 @@
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="13.546667mm"
height="13.546667mm"
viewBox="0 0 13.546667 13.546667"
version="1.1"
id="svg8"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="OpenSCAD_ScaleMesh.svg">
id="svg2766"
height="64px"
width="64px">
<title
id="title870">OpenSCAD_ScaleMeshFeature</title>
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.959798"
inkscape:cx="9.9518731"
inkscape:cy="-16.322498"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1001"
inkscape:window-x="1791"
inkscape:window-y="-9"
inkscape:window-maximized="1" />
id="defs2768">
<linearGradient
id="linearGradient3856">
<stop
id="stop3858"
offset="0"
style="stop-color:#4e9a06;stop-opacity:1" />
<stop
id="stop3860"
offset="1"
style="stop-color:#8ae234;stop-opacity:1" />
</linearGradient>
<linearGradient
id="linearGradient3824">
<stop
id="stop3826"
offset="0"
style="stop-color:#8ae234;stop-opacity:1" />
<stop
id="stop3828"
offset="1"
style="stop-color:#4e9a06;stop-opacity:1" />
</linearGradient>
<linearGradient
id="linearGradient3787">
<stop
style="stop-color:#0619c0;stop-opacity:1;"
offset="0"
id="stop3789" />
<stop
style="stop-color:#379cfb;stop-opacity:1;"
offset="1"
id="stop3791" />
</linearGradient>
<linearGradient
id="linearGradient3864">
<stop
style="stop-color:#0619c0;stop-opacity:1;"
offset="0"
id="stop3866" />
<stop
style="stop-color:#379cfb;stop-opacity:1;"
offset="1"
id="stop3868" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3895"
id="linearGradient3036"
gradientUnits="userSpaceOnUse"
x1="56.172409"
y1="29.279999"
x2="21.689653"
y2="36.079998"
gradientTransform="matrix(0,-1.4500001,1.4705882,0,-15.05882,91.45)" />
<linearGradient
id="linearGradient3895">
<stop
id="stop3897"
offset="0"
style="stop-color:#729fcf;stop-opacity:1;" />
<stop
id="stop3899"
offset="1"
style="stop-color:#204a87;stop-opacity:1;" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3895"
id="linearGradient3012"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.38366341,-0.38366341,0.41875298,0.41875298,12.196434,25.003375)"
x1="44.058071"
y1="18.865765"
x2="32.329041"
y2="43.940212" />
<linearGradient
gradientTransform="translate(-0.9420628,1.000004)"
gradientUnits="userSpaceOnUse"
y2="128.1946"
x2="599.1272"
y1="103.1946"
x1="591.59064"
id="linearGradient3830"
xlink:href="#linearGradient3824" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="68.194603"
x2="595.35895"
y1="135.1946"
x1="613.25824"
id="linearGradient3862"
xlink:href="#linearGradient3856"
gradientTransform="matrix(1.0614931,0,0,1,-612.96941,-69.194602)" />
<linearGradient
y2="43.940212"
x2="32.329041"
y1="18.865765"
x1="44.058071"
gradientTransform="matrix(0.38366341,-0.38366341,0.41875298,0.41875298,47.516141,23.120403)"
gradientUnits="userSpaceOnUse"
id="linearGradient3012-2"
xlink:href="#linearGradient3895" />
<linearGradient
xlink:href="#linearGradient3895"
id="linearGradient3012-2-5"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.38366341,-0.38366341,0.41875298,0.41875298,47.516141,23.120403)"
x1="44.058071"
y1="18.865765"
x2="32.329041"
y2="43.940212" />
<linearGradient
xlink:href="#linearGradient3895"
id="linearGradient3012-2-4"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.38366341,-0.38366341,0.41875298,0.41875298,47.516141,23.120403)"
x1="44.058071"
y1="18.865765"
x2="32.329041"
y2="43.940212" />
</defs>
<path
style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient3862);fill-opacity:1;fill-rule:nonzero;stroke:#172a04;stroke-width:2.00001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 2.9999733,3 3.19e-5,14 H 8.9999994 V 9 H 11.000001 V 3 Z M 15.000004,3 V 9 H 23 V 3 Z m 11.999999,0 v 6 h 7.999996 V 3 Z m 11.999999,0 v 6 h 7.999996 V 3 Z m 11.999999,0 v 6 h 4.000004 v 4 h 5.999994 V 3 Z m 4.000004,14 v 8 h 5.999994 V 17 Z M 3.0000052,21 v 8 h 5.9999942 v -8 z m 51.9999998,8 v 7.999998 h 5.999994 V 29 Z m 0,11.999998 v 8 h 5.999994 v -8 z m 0,12 v 2 h -4.000004 v 6 h 9.999998 v -8 z m -20.000006,2 v 6 h 11.999999 v -6 z"
id="rect3446" />
<path
id="path3018"
d="m 3.8583179,33.746218 v 26.48566 H 30.230137 v -26.48566 z"
style="fill:none;stroke:#172a04;stroke-width:3.60392;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path3832"
d="m 36.000003,57 h 10"
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path3834"
d="m 52.000003,57 h 5 v -2 h 3"
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
id="path3836"
d="M 57.000003,48 V 42"
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path3838"
d="M 57.000003,36 V 30"
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path3840"
d="M 57.000003,24 V 18"
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path3842"
d="M 53.000003,8 V 5 h 7"
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path3844"
d="m 46.000003,5 h -6"
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path3846"
d="m 34.000003,5 h -6"
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path3848"
d="m 22.000003,5 h -6"
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path3850"
d="M 10.000003,5 H 5.0000028 v 11"
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path3852"
d="m 5.0000028,22 v 6"
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path3854"
d="M 57.000003,12 V 9"
style="fill:none;stroke:#8ae234;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<metadata
id="metadata5">
id="metadata5370">
<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>
<dc:title>OpenSCAD_ScaleMeshFeature</dc:title>
<cc:license
rdf:resource="" />
<dc:date>12-01-2021</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>[bitacovir]</dc:title>
</cc:Agent>
</dc:creator>
<dc:rights>
<cc:Agent>
<dc:title>FreeCAD LGPL2+</dc:title>
</cc:Agent>
</dc:rights>
<dc:publisher>
<cc:Agent>
<dc:title>FreeCAD</dc:title>
</cc:Agent>
</dc:publisher>
<dc:identifier />
<dc:relation />
<dc:contributor>
<cc:Agent>
<dc:title>Based on a wmayer's design</dc:title>
</cc:Agent>
</dc:contributor>
<dc:subject>
<rdf:Bag>
<rdf:li>green square</rdf:li>
<rdf:li>arrow</rdf:li>
<rdf:li>dotted line</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:description></dc:description>
</cc:Work>
</rdf:RDF>
</metadata>
<rect
style="fill:none;fill-rule:evenodd;stroke:#8ae234;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;paint-order:markers stroke fill"
id="rect908"
width="23.379589"
height="23.553743"
x="5.2244897"
y="35.39592" />
<rect
y="37.359825"
x="7.2423844"
height="19.635378"
width="19.33061"
id="rect908-4"
style="fill:none;fill-rule:evenodd;stroke:#172a04;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;paint-order:markers stroke fill" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-42.363567,-31.690952)">
<image
y="31.690952"
x="42.363567"
id="image823"
xlink:href="data:image/png;base64,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
7FGz5guiMQAAAABJRU5ErkJggg==
"
style="image-rendering:optimizeQuality"
preserveAspectRatio="none"
height="13.546667"
width="13.546667" />
id="g954"
transform="matrix(0.53865293,-0.53865293,0.53865293,0.53865293,-32.932436,50.082417)">
<path
style="fill:url(#linearGradient3012-2);fill-opacity:1;fill-rule:evenodd;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 70.319706,13.117028 4.062816,4.37832 -8.062816,7.62168 6,6 7.719671,-7.964826 4.24264,4.242641 0.03769,-14.277815 z"
id="path3343-1" />
<path
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 74.869729,15.117028 2.325151,2.37832 -7.987668,7.653821 3.080353,3.112494 7.751812,-7.937888 2.221642,2.240472 0.05869,-7.447219 z"
id="path3343-2-8" />
</g>
<g
transform="matrix(0.53865293,0.53865293,-0.53865293,0.53865293,13.524918,-8.0540131)"
id="g954-4">
<path
id="path3343-1-3"
d="m 70.319706,13.117028 4.062816,4.37832 -8.062816,7.62168 6,6 7.719671,-7.964826 4.24264,4.242641 0.03769,-14.277815 z"
style="fill:url(#linearGradient3012-2-5);fill-opacity:1;fill-rule:evenodd;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path3343-2-8-6"
d="m 74.869729,15.117028 2.325151,2.37832 -7.987668,7.653821 3.080353,3.112494 7.751812,-7.937888 2.221642,2.240472 0.05869,-7.447219 z"
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
transform="matrix(0.76177028,0,0,0.76177028,-15.114559,5.5800087)"
id="g954-6">
<path
id="path3343-1-0"
d="m 70.319706,13.117028 4.062816,4.37832 -8.062816,7.62168 6,6 7.719671,-7.964826 4.24264,4.242641 0.03769,-14.277815 z"
style="fill:url(#linearGradient3012-2-4);fill-opacity:1;fill-rule:evenodd;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path3343-2-8-0"
d="m 74.869729,15.117028 2.325151,2.37832 -7.987668,7.653821 3.080353,3.112494 7.751812,-7.937888 2.221642,2.240472 0.05869,-7.447219 z"
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -316,6 +316,7 @@ CmdPartDesignMigrate::CmdPartDesignMigrate()
sToolTipText = QT_TR_NOOP("Migrate document to the modern PartDesign workflow");
sWhatsThis = "PartDesign_Migrate";
sStatusTip = sToolTipText;
sPixmap = "PartDesign_Migrate";
}
void CmdPartDesignMigrate::activated(int iMsg)
@@ -665,7 +666,7 @@ CmdPartDesignMoveFeature::CmdPartDesignMoveFeature()
sToolTipText = QT_TR_NOOP("Moves the selected object to another body");
sWhatsThis = "PartDesign_MoveFeature";
sStatusTip = sToolTipText;
sPixmap = "";
sPixmap = "PartDesign_MoveFeature";
}
void CmdPartDesignMoveFeature::activated(int iMsg)
@@ -827,7 +828,7 @@ CmdPartDesignMoveFeatureInTree::CmdPartDesignMoveFeatureInTree()
sToolTipText = QT_TR_NOOP("Moves the selected object and insert it after another object");
sWhatsThis = "PartDesign_MoveFeatureInTree";
sStatusTip = sToolTipText;
sPixmap = "";
sPixmap = "PartDesign_MoveFeatureInTree";
}
void CmdPartDesignMoveFeatureInTree::activated(int iMsg)

View File

@@ -28,7 +28,10 @@
<file>icons/PartDesign_InvoluteGear.svg</file>
<file>icons/PartDesign_Line.svg</file>
<file>icons/PartDesign_LinearPattern.svg</file>
<file>icons/PartDesign_Migrate.svg</file>
<file>icons/PartDesign_Mirrored.svg</file>
<file>icons/PartDesign_MoveFeature.svg</file>
<file>icons/PartDesign_MoveFeatureInTree.svg</file>
<file>icons/PartDesign_MoveTip.svg</file>
<file>icons/PartDesign_MultiTransform.svg</file>
<file>icons/PartDesign_Pad.svg</file>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -0,0 +1,551 @@
<?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"
width="64"
height="64"
id="svg2"
version="1.1">
<title
id="title882">PartDesign_MoveFeature</title>
<defs
id="defs4">
<linearGradient
id="linearGradient3829">
<stop
style="stop-color:#75507b;stop-opacity:1"
offset="0"
id="stop3831" />
<stop
style="stop-color:#ad7fa8;stop-opacity:1"
offset="1"
id="stop3833" />
</linearGradient>
<linearGradient
id="linearGradient3795">
<stop
style="stop-color:#f57900;stop-opacity:1"
offset="0"
id="stop3797" />
<stop
style="stop-color:#fcaf3e;stop-opacity:1"
offset="1"
id="stop3799" />
</linearGradient>
<linearGradient
id="linearGradient3934">
<stop
id="stop3936"
offset="0"
style="stop-color:#c9830a;stop-opacity:1;" />
<stop
id="stop3938"
offset="1"
style="stop-color:#c9830a;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3848">
<stop
style="stop-color:#bf3995;stop-opacity:1;"
offset="0"
id="stop3850" />
<stop
style="stop-color:#bf3995;stop-opacity:0;"
offset="1"
id="stop3852" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3848"
id="linearGradient3854"
x1="48.093758"
y1="1008.9432"
x2="38.347614"
y2="995.77875"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77529578,-0.06923186,0.06310961,0.72219207,30.120639,289.13727)" />
<linearGradient
xlink:href="#linearGradient3775"
id="linearGradient3781"
x1="52.716118"
y1="26.490843"
x2="36.133701"
y2="13.440783"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.84821031,0,0,0.80134799,9.4347167,988.8022)" />
<linearGradient
id="linearGradient3775">
<stop
style="stop-color:#0061e6;stop-opacity:1;"
offset="0"
id="stop3777" />
<stop
style="stop-color:#0061e6;stop-opacity:0;"
offset="1"
id="stop3779" />
</linearGradient>
<linearGradient
y2="5.601934"
x2="34.596375"
y1="25.452681"
x1="47.099728"
gradientTransform="matrix(0.72500566,-0.07035626,0.06715982,0.68170903,97.583428,1026.7212)"
gradientUnits="userSpaceOnUse"
id="linearGradient3004"
xlink:href="#linearGradient3775" />
<linearGradient
xlink:href="#linearGradient3848-3"
id="linearGradient3854-9"
x1="48.093758"
y1="1008.9432"
x2="38.032986"
y2="999.64392"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77529578,-0.06923186,0.06310961,0.72219207,-48.394623,284.99564)" />
<linearGradient
id="linearGradient3848-3">
<stop
style="stop-color:#bf3995;stop-opacity:1;"
offset="0"
id="stop3850-0" />
<stop
style="stop-color:#bf3995;stop-opacity:0;"
offset="1"
id="stop3852-2" />
</linearGradient>
<linearGradient
y2="996.14545"
x2="36.858414"
y1="1008.9432"
x1="48.093758"
gradientTransform="matrix(1.0220271,-0.0694911,0.02166527,1.2488507,31.644662,-245.52192)"
gradientUnits="userSpaceOnUse"
id="linearGradient3915"
xlink:href="#linearGradient3934" />
<linearGradient
xlink:href="#linearGradient3795"
id="linearGradient3801"
x1="12"
y1="1044.3622"
x2="13"
y2="1033.3622"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient3829"
id="linearGradient3835"
x1="45"
y1="1040.3622"
x2="62"
y2="1037.3622"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient3829-5"
id="linearGradient3841-7"
gradientUnits="userSpaceOnUse"
x1="45"
y1="1040.3622"
x2="62"
y2="1037.3622" />
<linearGradient
id="linearGradient3829-5">
<stop
style="stop-color:#75507b;stop-opacity:1"
offset="0"
id="stop3831-3" />
<stop
style="stop-color:#ad7fa8;stop-opacity:1"
offset="1"
id="stop3833-5" />
</linearGradient>
<linearGradient
y2="1037.3622"
x2="62"
y1="1040.3622"
x1="45"
gradientUnits="userSpaceOnUse"
id="linearGradient3860"
xlink:href="#linearGradient3829-5" />
<linearGradient
xlink:href="#linearGradient3829-2"
id="linearGradient3841-1"
gradientUnits="userSpaceOnUse"
x1="45"
y1="1040.3622"
x2="62"
y2="1037.3622" />
<linearGradient
id="linearGradient3829-2">
<stop
style="stop-color:#75507b;stop-opacity:1"
offset="0"
id="stop3831-7" />
<stop
style="stop-color:#ad7fa8;stop-opacity:1"
offset="1"
id="stop3833-0" />
</linearGradient>
<linearGradient
y2="27.588112"
x2="17.243532"
y1="54.588112"
x1="27.243532"
gradientTransform="translate(65.756467,954.77401)"
gradientUnits="userSpaceOnUse"
id="linearGradient69056"
xlink:href="#linearGradient4383" />
<linearGradient
id="linearGradient4383">
<stop
id="stop4385"
offset="0"
style="stop-color:#3465a4;stop-opacity:1" />
<stop
id="stop4387"
offset="1"
style="stop-color:#729fcf;stop-opacity:1" />
</linearGradient>
<linearGradient
gradientTransform="translate(68.285649,958.77634)"
gradientUnits="userSpaceOnUse"
y2="34.585785"
x2="44.714352"
y1="45.585785"
x1="48.714352"
id="linearGradient4399"
xlink:href="#linearGradient4393" />
<linearGradient
id="linearGradient4393">
<stop
id="stop4395"
offset="0"
style="stop-color:#204a87;stop-opacity:1" />
<stop
id="stop4397"
offset="1"
style="stop-color:#3465a4;stop-opacity:1" />
</linearGradient>
<linearGradient
y2="34.585785"
x2="44.714352"
y1="45.585785"
x1="48.714352"
gradientTransform="translate(54.285649,939.77634)"
gradientUnits="userSpaceOnUse"
id="linearGradient69042"
xlink:href="#linearGradient4393" />
<linearGradient
xlink:href="#linearGradient4383"
id="linearGradient1001"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(65.756467,954.77401)"
x1="27.243532"
y1="54.588112"
x2="17.243532"
y2="27.588112" />
<linearGradient
xlink:href="#linearGradient4393"
id="linearGradient1003"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(68.285649,958.77634)"
x1="48.714352"
y1="45.585785"
x2="44.714352"
y2="34.585785" />
<linearGradient
xlink:href="#linearGradient4393"
id="linearGradient1005"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(54.285649,939.77634)"
x1="48.714352"
y1="45.585785"
x2="44.714352"
y2="34.585785" />
<radialGradient
r="15.644737"
fy="36.421127"
fx="24.837126"
cy="36.421127"
cx="24.837126"
gradientTransform="matrix(1.6173222,0,0,0.58341935,-131.2612,-1035.2381)"
gradientUnits="userSpaceOnUse"
id="radialGradient3757"
xlink:href="#linearGradient8662" />
<linearGradient
id="linearGradient8662">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop8664" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop8666" />
</linearGradient>
<linearGradient
y2="24.842253"
x2="37.124462"
y1="30.748846"
x1="32.647972"
gradientTransform="matrix(1.0856435,0,0,1.0856435,64.810432,971.84991)"
gradientUnits="userSpaceOnUse"
id="linearGradient3759"
xlink:href="#linearGradient2690" />
<linearGradient
id="linearGradient2690">
<stop
style="stop-color:#c4d7eb;stop-opacity:1;"
offset="0"
id="stop2692" />
<stop
style="stop-color:#c4d7eb;stop-opacity:0;"
offset="1"
id="stop2694" />
</linearGradient>
<linearGradient
y2="24.842253"
x2="37.124462"
y1="31.455952"
x1="36.713837"
gradientTransform="matrix(1.0856435,0,0,1.0856435,64.810432,971.84991)"
gradientUnits="userSpaceOnUse"
id="linearGradient3761"
xlink:href="#linearGradient2682" />
<linearGradient
id="linearGradient2682">
<stop
style="stop-color:#3977c3;stop-opacity:1;"
offset="0"
id="stop2684" />
<stop
style="stop-color:#89aedc;stop-opacity:0;"
offset="1"
id="stop2686" />
</linearGradient>
<linearGradient
y2="26.649363"
x2="53.588623"
y1="23.667896"
x1="18.935766"
gradientUnits="userSpaceOnUse"
id="linearGradient3767"
xlink:href="#linearGradient2402" />
<linearGradient
id="linearGradient2402">
<stop
style="stop-color:#729fcf;stop-opacity:1;"
offset="0"
id="stop2404" />
<stop
style="stop-color:#528ac5;stop-opacity:1;"
offset="1"
id="stop2406" />
</linearGradient>
<linearGradient
y2="50.939667"
x2="45.380436"
y1="45.264122"
x1="46.834816"
gradientUnits="userSpaceOnUse"
id="linearGradient3769"
xlink:href="#linearGradient2871" />
<linearGradient
id="linearGradient2871">
<stop
style="stop-color:#3465a4;stop-opacity:1;"
offset="0"
id="stop2873" />
<stop
style="stop-color:#3465a4;stop-opacity:1"
offset="1"
id="stop2875" />
</linearGradient>
<linearGradient
y2="26.048164"
x2="52.854095"
y1="26.048164"
x1="5.9649177"
gradientUnits="userSpaceOnUse"
id="linearGradient3771"
xlink:href="#linearGradient2797" />
<linearGradient
id="linearGradient2797">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2799" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2801" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient2402"
id="linearGradient1083"
gradientUnits="userSpaceOnUse"
x1="18.935766"
y1="23.667896"
x2="53.588623"
y2="26.649363" />
<linearGradient
xlink:href="#linearGradient2871"
id="linearGradient1085"
gradientUnits="userSpaceOnUse"
x1="46.834816"
y1="45.264122"
x2="45.380436"
y2="50.939667" />
</defs>
<metadata
id="metadata7">
<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>PartDesign_MoveFeature</dc:title>
<dc:date>12-01-2021</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>[bitacovir]</dc:title>
</cc:Agent>
</dc:creator>
<dc:rights>
<cc:Agent>
<dc:title>FreeCAD LGPL2+</dc:title>
</cc:Agent>
</dc:rights>
<dc:publisher>
<cc:Agent>
<dc:title>FreeCAD</dc:title>
</cc:Agent>
</dc:publisher>
<dc:subject>
<rdf:Bag />
</dc:subject>
<dc:contributor>
<cc:Agent>
<dc:title></dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
transform="translate(0,-988.36218)">
<path
style="fill:none;stroke:#2e3436;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 10,1008.3622 H 42 32 v 26 h 14"
id="path3929" />
<path
style="fill:none;stroke:#d3d7cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 8,1008.3622 H 42 32 v 26 h 14"
id="path3929-0" />
<g
id="g933"
transform="matrix(0.45454461,0,0,0.45454461,5.8182532,555.2893)">
<path
style="fill:url(#linearGradient69056);fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
d="m 76,1006.3622 v -28.00002 l 14,5 v 14 l 14,5.00002 v 14 z"
id="path4381" />
<path
style="fill:url(#linearGradient4399);fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
d="m 104,1016.3622 v -14 l 18,-17.00002 v 13 z"
id="path4391" />
<path
style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
d="m 76,978.36218 20,-16.00005 13,4.99995 -19,16.0001 z"
id="path4403" />
<path
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none"
d="M 78.008035,1004.9684 78,981.36218 l 10,4 v 13 l 14,5.00002 0.008,10.1848 z"
id="path4381-7" />
<path
style="fill:none;stroke:#3465a4;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none"
d="m 106.00504,1011.5304 -0.005,-8.1682 14,-13.00002 0.002,7.1768 z"
id="path4391-0" />
<path
id="path69038"
d="m 90,997.36218 19,-17 13,5 -18,17.00002 z"
style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
<path
id="path69040"
d="m 90,997.36218 v -14 l 19,-16.0001 v 13.0001 z"
style="fill:url(#linearGradient69042);fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
<path
id="path69044"
d="m 92,993.36218 v -9 l 15,-13.0001 v 8.0001 z"
style="fill:none;stroke:#3465a4;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
<g
transform="matrix(0.45454461,0,0,0.45454461,5.7273606,583.74384)"
id="g933-4">
<path
id="path4381-6"
d="m 76,1006.3622 v -28.00002 l 14,5 v 14 l 14,5.00002 v 14 z"
style="fill:url(#linearGradient1001);fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
<path
id="path4391-5"
d="m 104,1016.3622 v -14 l 18,-17.00002 v 13 z"
style="fill:url(#linearGradient1003);fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
<path
id="path4403-9"
d="m 76,978.36218 20,-16.00005 13,4.99995 -19,16.0001 z"
style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
<path
id="path4381-7-8"
d="M 78.008035,1004.9684 78,981.36218 l 10,4 v 13 l 14,5.00002 0.008,10.1848 z"
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none" />
<path
id="path4391-0-0"
d="m 106.00504,1011.5304 -0.005,-8.1682 14,-13.00002 0.002,7.1768 z"
style="fill:none;stroke:#3465a4;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none" />
<path
style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
d="m 90,997.36218 19,-17 13,5 -18,17.00002 z"
id="path69038-1" />
<path
style="fill:url(#linearGradient1005);fill-opacity:1;fill-rule:nonzero;stroke:#0b1521;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
d="m 90,997.36218 v -14 l 19,-16.0001 v 13.0001 z"
id="path69040-3" />
<path
style="fill:none;stroke:#3465a4;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none"
d="m 92,993.36218 v -9 l 15,-13.0001 v 8.0001 z"
id="path69044-7" />
</g>
<g
id="g1100"
transform="matrix(0,-1,-1,0,1019.3622,1107.3622)">
<path
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient3759);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3761);stroke-width:1.08351;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
d="m 95.615566,1008.1511 c 0,0 9.702934,0.6785 6.717424,-10.72071 h 8.44184 c 0,1.63129 -0.63878,12.89201 -15.159264,10.72071 z"
id="path2839" />
<g
id="g2779"
transform="matrix(0.62864295,0.5311272,0.5311272,-0.62864295,56.211024,1005.0011)"
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient3767);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3769);stroke-width:1.31657;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none">
<path
id="path2781"
d="M 44.306783,50.229694 C 62.821497,35.818859 49.664587,13.411704 22.462411,12.49765 L 22.399432,3.0690297 7.793943,20.424005 22.462411,33.006349 c 0,0 0,-9.66838 0,-9.66838 18.82976,0.998977 32.981627,14.071729 21.844372,26.891725 z"
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#linearGradient1083);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient1085);stroke-width:1.31657;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
</g>
<path
id="path2791"
d="m 72.477789,1013.3079 0.06785,-16.14893 14.045512,-0.40711 -4.764751,5.62234 4.198428,2.5765 c -3.256931,2.4427 -4.939188,2.6295 -6.024831,5.4115 l -3.058104,-2.291 z"
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.272222;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.4429;stroke-miterlimit:4;stroke-dasharray:none;marker:none" />
<g
style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1.49913;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(0.5520888,0.46644782,0.46644782,-0.5520888,60.496966,1005.0068)"
id="g2793">
<path
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient3771);stroke-width:1.49913;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
d="M 51.090265,45.943705 C 60.210465,30.723955 46.631614,12.20113 19.485058,11.948579 L 19.513464,3.7032834 6.5341979,19.296639 19.367661,30.26876 c 0,0 0.05562,-9.006878 0.05562,-9.006878 17.527815,-0.223909 35.195185,10.103372 31.666984,24.681823 z"
id="path2795" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -0,0 +1,524 @@
<?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"
width="64px"
height="64px"
id="svg3612"
version="1.1">
<title
id="title964">PartDesign_MoveFeatureInTree</title>
<defs
id="defs3614">
<marker
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow1Mend"
style="overflow:visible;">
<path
id="path3835"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;"
transform="scale(0.4) rotate(180) translate(10,0)" />
</marker>
<marker
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow1Mstart"
style="overflow:visible">
<path
id="path3832"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
transform="scale(0.4) translate(10,0)" />
</marker>
<marker
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow1Lstart"
style="overflow:visible">
<path
id="path3826"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
transform="scale(0.8) translate(12.5,0)" />
</marker>
<linearGradient
id="linearGradient3144-6">
<stop
id="stop3146-9"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop3148-2"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3701">
<stop
id="stop3703"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop3705"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient3144-6"
id="radialGradient3688"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
id="linearGradient3708">
<stop
id="stop3710"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop3712"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3864-0-0">
<stop
id="stop3866-5-7"
offset="0"
style="stop-color:#0619c0;stop-opacity:1;" />
<stop
id="stop3868-7-6"
offset="1"
style="stop-color:#379cfb;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3377">
<stop
id="stop3379"
offset="0"
style="stop-color:#ffaa00;stop-opacity:1;" />
<stop
id="stop3381"
offset="1"
style="stop-color:#faff2b;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3864-0">
<stop
id="stop3866-5"
offset="0"
style="stop-color:#0619c0;stop-opacity:1;" />
<stop
id="stop3868-7"
offset="1"
style="stop-color:#379cfb;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient5048">
<stop
style="stop-color:black;stop-opacity:0;"
offset="0"
id="stop5050" />
<stop
id="stop5056"
offset="0.5"
style="stop-color:black;stop-opacity:1;" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5052" />
</linearGradient>
<linearGradient
id="linearGradient3841-0-3">
<stop
id="stop3843-1-3"
offset="0"
style="stop-color:#0619c0;stop-opacity:1;" />
<stop
id="stop3845-0-8"
offset="1"
style="stop-color:#379cfb;stop-opacity:1;" />
</linearGradient>
<radialGradient
gradientUnits="userSpaceOnUse"
fy="114.5684"
fx="20.892099"
r="5.256"
cy="114.5684"
cx="20.892099"
id="aigrd2">
<stop
id="stop15566"
style="stop-color:#F0F0F0"
offset="0" />
<stop
id="stop15568"
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
offset="1.0000000" />
</radialGradient>
<radialGradient
gradientUnits="userSpaceOnUse"
fy="64.567902"
fx="20.892099"
r="5.257"
cy="64.567902"
cx="20.892099"
id="aigrd3">
<stop
id="stop15573"
style="stop-color:#F0F0F0"
offset="0" />
<stop
id="stop15575"
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
offset="1.0000000" />
</radialGradient>
<linearGradient
id="linearGradient15662">
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop15664" />
<stop
style="stop-color:#f8f8f8;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop15666" />
</linearGradient>
<radialGradient
r="86.70845"
fy="35.736916"
fx="33.966679"
cy="35.736916"
cx="33.966679"
gradientTransform="matrix(0.96049297,0,0,1.041132,-52.144249,-702.33158)"
gradientUnits="userSpaceOnUse"
id="radialGradient4452"
xlink:href="#linearGradient259" />
<linearGradient
id="linearGradient259">
<stop
style="stop-color:#fafafa;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop260" />
<stop
style="stop-color:#bbbbbb;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop261" />
</linearGradient>
<radialGradient
r="37.751713"
fy="3.7561285"
fx="8.824419"
cy="3.7561285"
cx="8.824419"
gradientTransform="matrix(0.96827297,0,0,1.032767,-48.790699,-701.68513)"
gradientUnits="userSpaceOnUse"
id="radialGradient4454"
xlink:href="#linearGradient269" />
<linearGradient
id="linearGradient269">
<stop
style="stop-color:#a3a3a3;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop270" />
<stop
style="stop-color:#4c4c4c;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop271" />
</linearGradient>
<linearGradient
id="linearGradient4095">
<stop
style="stop-color:#005bff;stop-opacity:1;"
offset="0"
id="stop4097" />
<stop
style="stop-color:#c1e3f7;stop-opacity:1;"
offset="1"
id="stop4099" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient4247"
id="linearGradient4253"
x1="394.15784"
y1="185.1304"
x2="434.73947"
y2="140.22731"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.94231826,0,0,0.94231826,23.727549,8.8262536)" />
<linearGradient
id="linearGradient4247">
<stop
style="stop-color:#2e8207;stop-opacity:1;"
offset="0"
id="stop4249" />
<stop
style="stop-color:#52ff00;stop-opacity:1;"
offset="1"
id="stop4251" />
</linearGradient>
<linearGradient
y2="140.22731"
x2="434.73947"
y1="185.1304"
x1="394.15784"
gradientTransform="matrix(0.94231826,0,0,0.94231826,23.727549,8.8262536)"
gradientUnits="userSpaceOnUse"
id="linearGradient5087"
xlink:href="#linearGradient4247" />
<marker
orient="auto"
refY="0"
refX="0"
id="Arrow1Mstart-9"
style="overflow:visible">
<path
id="path3832-1"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.4,0,0,0.4,4,0)" />
</marker>
<marker
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend-2"
style="overflow:visible">
<path
id="path3835-7"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.4,0,0,-0.4,-4,0)" />
</marker>
<linearGradient
id="linearGradient3895-5">
<stop
style="stop-color:#729fcf;stop-opacity:1;"
offset="0"
id="stop3897-6" />
<stop
style="stop-color:#204a87;stop-opacity:1;"
offset="1"
id="stop3899-2" />
</linearGradient>
<linearGradient
id="linearGradient3094-7-8">
<stop
id="stop3096-6-7"
offset="0"
style="stop-color:#4e9a06;stop-opacity:1" />
<stop
id="stop3098-0-4"
offset="1"
style="stop-color:#8ae234;stop-opacity:1" />
</linearGradient>
<linearGradient
y2="42"
x2="46"
y1="54"
x1="48"
gradientUnits="userSpaceOnUse"
id="linearGradient3834-3-0"
xlink:href="#linearGradient3895-5" />
<linearGradient
xlink:href="#linearGradient3895-5"
id="linearGradient3834-3-0-5"
gradientUnits="userSpaceOnUse"
x1="48"
y1="54"
x2="46"
y2="42" />
</defs>
<metadata
id="metadata3617">
<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>PartDesign_MoveFeatureInTree</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>[bitacovir]</dc:title>
</cc:Agent>
</dc:creator>
<dc:title>OpenSCAD_RemoveSubtree</dc:title>
<dc:date>12-01-2021</dc:date>
<dc:relation>http://www.freecadweb.org/wiki/index.php?title=Artwork</dc:relation>
<dc:publisher>
<cc:Agent>
<dc:title>FreeCAD</dc:title>
</cc:Agent>
</dc:publisher>
<dc:identifier></dc:identifier>
<dc:rights>
<cc:Agent>
<dc:title>FreeCAD LGPL2+</dc:title>
</cc:Agent>
</dc:rights>
<cc:license>https://www.gnu.org/copyleft/lesser.html</cc:license>
<dc:contributor>
<cc:Agent>
<dc:title></dc:title>
</cc:Agent>
</dc:contributor>
<dc:subject>
<rdf:Bag />
</dc:subject>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1">
<g
id="g4294-3"
transform="translate(2.7790302,-33.031848)">
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#eeeeec;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect4258-1-7-4-3-6"
width="26.38888"
height="9.9999943"
x="21"
y="51"
rx="0"
ry="0" />
<rect
y="53"
x="23"
height="6"
width="22"
id="rect3852-5-5-7"
style="fill:#d3d7cf;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="g4294-3-5"
transform="translate(0.73689359,-1.1438838)">
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#eeeeec;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect4258-1-7-4-3-6-3"
width="26.38888"
height="9.9999943"
x="21"
y="51"
rx="0"
ry="0" />
<rect
y="53"
x="23"
height="6"
width="22"
id="rect3852-5-5-7-5"
style="fill:#d3d7cf;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<path
id="path5098-3"
d="M 8.999987,12.999998 V 55 h 12"
style="fill:none;stroke:#2e3436;stroke-width:6;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path5100-6"
d="m 23,23 -14.000013,-2e-6"
style="fill:none;stroke:#2e3436;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path5098-36"
d="M 8.999987,12.999998 V 55 h 12"
style="fill:none;stroke:#d3d7cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path5100-7"
d="m 24,23 -15.000013,-2e-6"
style="fill:none;stroke:#d3d7cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
ry="0"
rx="0"
y="3"
x="3.0000002"
height="10"
width="37.999989"
id="rect4258-1-7-4-5"
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#eeeeec;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
style="fill:#d3d7cf;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3852-5-3"
width="34"
height="6"
x="5"
y="5" />
<g
id="g4294"
transform="translate(8.5333989,-17.066798)">
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#eeeeec;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect4258-1-7-4-3"
width="26.38888"
height="9.9999943"
x="21"
y="51"
rx="0"
ry="0" />
<rect
y="53"
x="23"
height="6"
width="22"
id="rect3852-5-5"
style="fill:#d3d7cf;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<path
id="path5098-3-2"
d="M 17,24 V 39 H 29"
style="fill:none;stroke:#2e3436;stroke-width:6;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path5098-36-6"
d="M 17,23 V 39 H 29"
style="fill:none;stroke:#d3d7cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
id="g985"
transform="translate(-32.24262,11.414205)">
<g
id="g3830-3-2"
transform="rotate(-135,58.322322,11.665485)">
<path
transform="translate(0,-16)"
id="path3050-5-8"
d="M 57,57 V 39 l -6,6 -8,-8 -6,6 8,8 -6,6 z"
style="fill:url(#linearGradient3834-3-0);fill-opacity:1;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
transform="translate(0,-16)"
id="path3820-6-9"
d="M 43.84375,55 H 55 V 43.84375 l -4,3.984375 -8,-8 L 39.828125,43 47.84375,51 Z"
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
</g>
<g
transform="matrix(1,0,0,-1,-32.242834,51.899718)"
id="g985-6">
<g
transform="rotate(-135,58.322322,11.665485)"
id="g3830-3-2-7">
<path
style="fill:url(#linearGradient3834-3-0-5);fill-opacity:1;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
d="M 57,57 V 39 l -6,6 -8,-8 -6,6 8,8 -6,6 z"
id="path3050-5-8-3"
transform="translate(0,-16)" />
<path
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 43.84375,55 H 55 V 43.84375 l -4,3.984375 -8,-8 L 39.828125,43 47.84375,51 Z"
id="path3820-6-9-2"
transform="translate(0,-16)" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -31,8 +31,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>549</width>
<height>628</height>
<width>146</width>
<height>378</height>
</rect>
</property>
<attribute name="label">
@@ -112,8 +112,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>98</width>
<height>28</height>
<width>96</width>
<height>26</height>
</rect>
</property>
<attribute name="label">
@@ -281,7 +281,7 @@
<string>G54</string>
</property>
<property name="checkState">
<enum>Checked</enum>
<enum>Unchecked</enum>
</property>
</item>
<item>
@@ -431,8 +431,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>536</width>
<height>1291</height>
<width>545</width>
<height>896</height>
</rect>
</property>
<attribute name="label">
@@ -1002,8 +1002,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>419</width>
<height>548</height>
<width>213</width>
<height>321</height>
</rect>
</property>
<attribute name="label">
@@ -1096,7 +1096,7 @@
</widget>
</item>
<item row="1" column="3">
<widget class="Gui::QuantitySpinBox" name="setupClearanceHeightOffs" native="true">
<widget class="Gui::QuantitySpinBox" name="setupClearanceHeightOffs">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;ClearanceHeightOffset - can be used by expressions to set the default ClearanceHeight for new operations.&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Default: &amp;quot;3 mm&amp;quot;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
@@ -1123,7 +1123,7 @@
</widget>
</item>
<item row="3" column="3">
<widget class="Gui::QuantitySpinBox" name="setupSafeHeightOffs" native="true">
<widget class="Gui::QuantitySpinBox" name="setupSafeHeightOffs">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;SafeHeightOffset can be for expressions to set the SafeHeight for new operations.&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Default: &amp;quot;5 mm&amp;quot;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
@@ -1185,8 +1185,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>549</width>
<height>628</height>
<width>317</width>
<height>173</height>
</rect>
</property>
<attribute name="label">
@@ -1285,8 +1285,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>208</width>
<height>160</height>
<width>138</width>
<height>112</height>
</rect>
</property>
<attribute name="label">
@@ -1310,7 +1310,7 @@
</widget>
</item>
<item row="0" column="1">
<widget class="Gui::QuantitySpinBox" name="setupRapidHorizontal" native="true">
<widget class="Gui::QuantitySpinBox" name="setupRapidHorizontal">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
@@ -1330,7 +1330,7 @@
</widget>
</item>
<item row="1" column="1">
<widget class="Gui::QuantitySpinBox" name="setupRapidVertical" native="true">
<widget class="Gui::QuantitySpinBox" name="setupRapidVertical">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>

View File

@@ -56,6 +56,9 @@ class JobTemplate:
PostProcessor = 'Post'
PostProcessorArgs = 'PostArgs'
PostProcessorOutputFile = 'Output'
Fixtures = 'Fixtures'
OrderOutputBy = 'OrderOutputBy'
SplitOutput = 'SplitOutput'
SetupSheet = 'SetupSheet'
Stock = 'Stock'
# TCs are grouped under Tools in a job, the template refers to them directly though
@@ -121,7 +124,6 @@ class ObjectJob:
obj.addProperty("App::PropertyLink", "Stock", "Base", QtCore.QT_TRANSLATE_NOOP("PathJob", "Solid object to be used as stock."))
obj.addProperty("App::PropertyLink", "Operations", "Base", QtCore.QT_TRANSLATE_NOOP("PathJob", "Compound path of all operations in the order they are processed."))
#obj.addProperty("App::PropertyLinkList", "ToolController", "Base", QtCore.QT_TRANSLATE_NOOP("PathJob", "Collection of tool controllers available for this job."))
obj.addProperty("App::PropertyBool", "SplitOutput", "Output", QtCore.QT_TRANSLATE_NOOP("PathJob", "Split output into multiple gcode files"))
obj.addProperty("App::PropertyEnumeration", "OrderOutputBy", "WCS", QtCore.QT_TRANSLATE_NOOP("PathJob", "If multiple WCS, order the output this way"))
@@ -350,6 +352,15 @@ class ObjectJob:
if attrs.get(JobTemplate.Stock):
obj.Stock = PathStock.CreateFromTemplate(obj, attrs.get(JobTemplate.Stock))
if attrs.get(JobTemplate.Fixtures):
obj.Fixtures = [x for y in attrs.get(JobTemplate.Fixtures) for x in y]
if attrs.get(JobTemplate.OrderOutputBy):
obj.OrderOutputBy = attrs.get(JobTemplate.OrderOutputBy)
if attrs.get(JobTemplate.SplitOutput):
obj.SplitOutput = attrs.get(JobTemplate.SplitOutput)
PathLog.debug("setting tool controllers (%d)" % len(tcs))
obj.Tools.Group = tcs
else:
@@ -364,6 +375,9 @@ class ObjectJob:
if obj.PostProcessor:
attrs[JobTemplate.PostProcessor] = obj.PostProcessor
attrs[JobTemplate.PostProcessorArgs] = obj.PostProcessorArgs
attrs[JobTemplate.Fixtures] = [{f: True} for f in obj.Fixtures]
attrs[JobTemplate.OrderOutputBy] = obj.OrderOutputBy
attrs[JobTemplate.SplitOutput] = obj.SplitOutput
if obj.PostProcessorOutputFile:
attrs[JobTemplate.PostProcessorOutputFile] = obj.PostProcessorOutputFile
attrs[JobTemplate.GeometryTolerance] = str(obj.GeometryTolerance.Value)

View File

@@ -34,7 +34,7 @@ __doc__ = "A container for all default values and job specific configuration val
_RegisteredOps = {}
PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule())
PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule())
# PathLog.trackModule(PathLog.thisModule())
@@ -55,11 +55,15 @@ class Template:
StartDepthExpression = 'StartDepthExpression'
FinalDepthExpression = 'FinalDepthExpression'
StepDownExpression = 'StepDownExpression'
Fixtures = 'Fixtures'
OrderOutputBy = 'OrderOutputBy'
SplitOutput = 'SplitOutput'
All = [HorizRapid, VertRapid, CoolantMode, SafeHeightOffset, SafeHeightExpression, ClearanceHeightOffset, ClearanceHeightExpression, StartDepthExpression, FinalDepthExpression, StepDownExpression]
def _traverseTemplateAttributes(attrs, codec):
PathLog.debug(attrs)
coded = {}
for key, value in PathUtil.keyValueIter(attrs):
if type(value) == dict:

View File

@@ -26,7 +26,6 @@ import PathScripts.PathGui as PathGui
import PathScripts.PathIconViewProvider as PathIconViewProvider
import PathScripts.PathLog as PathLog
import PathScripts.PathSetupSheet as PathSetupSheet
# import PathScripts.PathSetupSheetOpPrototype as PathSetupSheetOpPrototype
import PathScripts.PathSetupSheetOpPrototypeGui as PathSetupSheetOpPrototypeGui
import PathScripts.PathUtil as PathUtil
@@ -37,18 +36,22 @@ __author__ = "sliptonic (Brad Collette)"
__url__ = "https://www.freecadweb.org"
__doc__ = "Task panel editor for a SetupSheet"
# Qt translation handling
def translate(context, text, disambig=None):
return QtCore.QCoreApplication.translate(context, text, disambig)
LOGLEVEL = False
if LOGLEVEL:
PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule())
PathLog.trackModule(PathLog.thisModule())
else:
PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule())
class ViewProvider:
'''ViewProvider for a SetupSheet.
It's sole job is to provide an icon and invoke the TaskPanel on edit.'''
@@ -100,14 +103,11 @@ class ViewProvider:
def doubleClicked(self, vobj):
self.setEdit(vobj)
class Delegate(QtGui.QStyledItemDelegate):
PropertyRole = QtCore.Qt.UserRole + 1
EditorRole = QtCore.Qt.UserRole + 2
#def paint(self, painter, option, index):
# #PathLog.track(index.column(), type(option))
def createEditor(self, parent, option, index):
# pylint: disable=unused-argument
if index.data(self.EditorRole) is None:
@@ -130,6 +130,7 @@ class Delegate(QtGui.QStyledItemDelegate):
# pylint: disable=unused-argument
widget.setGeometry(option.rect)
class OpTaskPanel:
'''Editor for an operation's property default values.
The implementation is a simplified generic property editor with basically 3 fields
@@ -168,16 +169,16 @@ class OpTaskPanel:
self.model = QtGui.QStandardItemModel(len(self.props), 3, self.form)
self.model.setHorizontalHeaderLabels(['Set', 'Property', 'Value'])
for i,name in enumerate(self.props):
for i, name in enumerate(self.props):
prop = self.prototype.getProperty(name)
isset = hasattr(self.obj, self.propertyName(name))
if isset:
prop.setValue(getattr(self.obj, self.propertyName(name)))
self.model.setData(self.model.index(i, 0), isset, QtCore.Qt.EditRole)
self.model.setData(self.model.index(i, 1), name, QtCore.Qt.EditRole)
self.model.setData(self.model.index(i, 2), prop, Delegate.PropertyRole)
self.model.setData(self.model.index(i, 2), prop.displayString(), QtCore.Qt.DisplayRole)
self.model.setData(self.model.index(i, 1), name, QtCore.Qt.EditRole)
self.model.setData(self.model.index(i, 2), prop, Delegate.PropertyRole)
self.model.setData(self.model.index(i, 2), prop.displayString(), QtCore.Qt.DisplayRole)
self.model.item(i, 0).setCheckable(True)
self.model.item(i, 0).setText('')
@@ -206,7 +207,7 @@ class OpTaskPanel:
def accept(self):
propertiesCreatedRemoved = False
for i,name in enumerate(self.props):
for i, name in enumerate(self.props):
prop = self.prototype.getProperty(name)
propName = self.propertyName(name)
enabled = self.model.item(i, 0).checkState() == QtCore.Qt.Checked
@@ -229,7 +230,7 @@ class OpsDefaultEditor:
def __init__(self, obj, form):
self.form = form
self.obj = obj
self.ops = sorted([OpTaskPanel(self.obj, name, op) for name, op in PathUtil.keyValueIter(PathSetupSheet._RegisteredOps)], key = lambda op: op.name) # pylint: disable=protected-access
self.ops = sorted([OpTaskPanel(self.obj, name, op) for name, op in PathUtil.keyValueIter(PathSetupSheet._RegisteredOps)], key=lambda op: op.name)
if form:
parent = form.tabOpDefaults
for op in self.ops:
@@ -245,10 +246,6 @@ class OpsDefaultEditor:
def accept(self):
if any([op.accept() for op in self.ops]):
PathLog.track()
#sel = FreeCADGui.Selection.getSelection()
#FreeCADGui.Selection.clearSelection()
#for o in sel:
# FreeCADGui.Selection.addSelection(o)
def getFields(self):
pass
@@ -264,7 +261,7 @@ class OpsDefaultEditor:
self.currentOp = self.form.opDefaultOp.itemData(current)
self.currentOp.form.show()
def updateModel(self, recomp = True):
def updateModel(self, recomp=True):
PathLog.track()
self.getFields()
self.updateUI()
@@ -281,6 +278,7 @@ class OpsDefaultEditor:
if self.form:
self.form.opDefaultOp.currentIndexChanged.connect(self.updateUI)
class GlobalEditor(object):
'''Editor for the global properties which affect almost every operation.'''
@@ -293,7 +291,6 @@ class GlobalEditor(object):
self.safeHeightOffs = None
self.rapidHorizontal = None
self.rapidVertical = None
#self.coolantMode = None
def reject(self):
pass
@@ -308,16 +305,15 @@ class GlobalEditor(object):
if val != value:
PathUtil.setProperty(self.obj, name, value)
updateExpression('StartDepthExpression', self.form.setupStartDepthExpr)
updateExpression('FinalDepthExpression', self.form.setupFinalDepthExpr)
updateExpression('StepDownExpression', self.form.setupStepDownExpr)
updateExpression('ClearanceHeightExpression', self.form.setupClearanceHeightExpr)
updateExpression('SafeHeightExpression', self.form.setupSafeHeightExpr)
updateExpression('StartDepthExpression', self.form.setupStartDepthExpr)
updateExpression('FinalDepthExpression', self.form.setupFinalDepthExpr)
updateExpression('StepDownExpression', self.form.setupStepDownExpr)
updateExpression('ClearanceHeightExpression', self.form.setupClearanceHeightExpr)
updateExpression('SafeHeightExpression', self.form.setupSafeHeightExpr)
self.clearanceHeightOffs.updateProperty()
self.safeHeightOffs.updateProperty()
self.rapidVertical.updateProperty()
self.rapidHorizontal.updateProperty()
#self.coolantMode.updateProperty()
self.obj.CoolantMode = self.form.setupCoolantMode.currentText()
def selectInComboBox(self, name, combo):
@@ -330,18 +326,18 @@ class GlobalEditor(object):
def updateUI(self):
PathLog.track()
self.form.setupStartDepthExpr.setText( self.obj.StartDepthExpression)
self.form.setupFinalDepthExpr.setText( self.obj.FinalDepthExpression)
self.form.setupStepDownExpr.setText( self.obj.StepDownExpression)
self.form.setupClearanceHeightExpr.setText( self.obj.ClearanceHeightExpression)
self.form.setupSafeHeightExpr.setText( self.obj.SafeHeightExpression)
self.form.setupStartDepthExpr.setText(self.obj.StartDepthExpression)
self.form.setupFinalDepthExpr.setText(self.obj.FinalDepthExpression)
self.form.setupStepDownExpr.setText(self.obj.StepDownExpression)
self.form.setupClearanceHeightExpr.setText(self.obj.ClearanceHeightExpression)
self.form.setupSafeHeightExpr.setText(self.obj.SafeHeightExpression)
self.clearanceHeightOffs.updateSpinBox()
self.safeHeightOffs.updateSpinBox()
self.rapidVertical.updateSpinBox()
self.rapidHorizontal.updateSpinBox()
self.selectInComboBox(self.obj.CoolantMode, self.form.setupCoolantMode)
def updateModel(self, recomp = True):
def updateModel(self, recomp=True):
PathLog.track()
self.getFields()
self.updateUI()
@@ -359,6 +355,7 @@ class GlobalEditor(object):
self.form.setupCoolantMode.addItems(self.obj.CoolantModes)
self.setFields()
class TaskPanel:
'''TaskPanel for the SetupSheet - if it is being edited directly.'''
@@ -387,8 +384,6 @@ class TaskPanel:
FreeCADGui.ActiveDocument.resetEdit()
FreeCADGui.Control.closeDialog()
FreeCAD.ActiveDocument.recompute()
#FreeCADGui.Selection.removeObserver(self.s)
#FreeCAD.ActiveDocument.recompute()
def getFields(self):
self.globalEditor.getFields()
@@ -411,11 +406,13 @@ class TaskPanel:
self.globalEditor.setupUi()
self.opsEditor.setupUi()
def Create(name = 'SetupSheet'):
'''Create(name = 'SetupSheet') ... creates a new setup sheet'''
def Create(name='SetupSheet'):
'''Create(name='SetupSheet') ... creates a new setup sheet'''
FreeCAD.ActiveDocument.openTransaction(translate("Path_Job", "Create Job"))
ssheet = PathSetupSheet.Create(name)
PathIconViewProvider.Attach(ssheet, name)
return ssheet
PathIconViewProvider.RegisterViewProvider('SetupSheet', ViewProvider)

View File

@@ -647,11 +647,11 @@ bool DrawViewDimension::isMultiValueSchema(void) const
}
Base::UnitSystem uniSys = Base::UnitsApi::getSchema();
if ( (uniSys == Base::UnitSystem::ImperialBuilding) &&
!angularMeasure ) {
if ((uniSys == Base::UnitSystem::ImperialBuilding) &&
!angularMeasure) {
result = true;
} else if ((uniSys == Base::UnitSystem::ImperialCivil) &&
angularMeasure) {
!angularMeasure) {
result = true;
}
return result;
@@ -736,6 +736,13 @@ std::string DrawViewDimension::formatValue(qreal value, QString qFormatSpec, int
qMultiValueStr = formatPrefix + qGenPrefix + displaySub + formatSuffix;
}
formattedValue = qMultiValueStr;
} else if (isMultiValueSchema()) {
qMultiValueStr = qUserString;
if (!genPrefix.empty()) {
//qUserString from Quantity includes units - prefix + R + nnn ft + suffix
qMultiValueStr = formatPrefix + qUserString + formatSuffix;
}
return qMultiValueStr.toStdString();
} else {
if (formatSpecifier.isEmpty()) {
Base::Console().Warning("Warning - no numeric format in Format Spec %s - %s\n",
@@ -810,16 +817,6 @@ std::string DrawViewDimension::formatValue(qreal value, QString qFormatSpec, int
}
}
if ((unitSystem == Base::UnitSystem::ImperialBuilding) &&
!angularMeasure) {
qMultiValueStr = formattedValue;
if (!genPrefix.empty()) {
//qUserString from Quantity includes units - prefix + R + nnn ft + suffix
qMultiValueStr = formatPrefix + qGenPrefix + qUserString + formatSuffix;
}
formattedValue = qMultiValueStr;
}
result = formattedValue.toStdString();
if (partial == 0) {

View File

@@ -312,10 +312,14 @@ void MDIViewPage::closeEvent(QCloseEvent* ev)
void MDIViewPage::attachTemplate(TechDraw::DrawTemplate *obj)
{
m_view->setPageTemplate(obj);
double width = obj->Width.getValue();
double height = obj->Height.getValue();
m_paperSize = getPaperSize(int(round(width)),int(round(height)));
if (width > height) {
pagewidth = obj->Width.getValue();
pageheight = obj->Height.getValue();
#if QT_VERSION >= 0x050300
m_paperSize = QPageSize::id(QSizeF(pagewidth, pageheight), QPageSize::Millimeter, QPageSize::FuzzyOrientationMatch);
#else
m_paperSize = getPaperSize(int(round(pagewidth)), int(round(pageheight)));
#endif
if (pagewidth > pageheight) {
#if QT_VERSION >= 0x050300
m_orientation = QPageLayout::Landscape;
#else
@@ -496,17 +500,6 @@ void MDIViewPage::fixOrphans(bool force)
}
}
}
// Update all the QGIVxxxx
// WF: why do we do this? views should be keeping themselves up to date.
// const std::vector<QGIView *> &upviews = m_view->getViews();
// for(std::vector<QGIView *>::const_iterator it = upviews.begin(); it != upviews.end(); ++it) {
// Base::Console().Message("TRACE - MDIVP::fixOrphans - updating a QGIVxxxx\n");
// if((*it)->getViewObject()->isTouched() ||
// forceUpdate) {
// (*it)->updateView(forceUpdate);
// }
// }
}
//NOTE: this doesn't add missing views. see fixOrphans()
@@ -530,6 +523,7 @@ void MDIViewPage::redraw1View(TechDraw::DrawView* dv)
}
}
}
void MDIViewPage::findMissingViews(const std::vector<App::DocumentObject*> &list, std::vector<App::DocumentObject*> &missing)
{
for(std::vector<App::DocumentObject*>::const_iterator it = list.begin(); it != list.end(); ++it) {
@@ -692,7 +686,11 @@ void MDIViewPage::printPdf(std::string file)
#endif
}
#if QT_VERSION >= 0x050300
printer.setPageSize(QPageSize(m_paperSize));
if (m_paperSize == QPageSize::Custom) {
printer.setPageSize(QPageSize(QSizeF(pagewidth, pageheight), QPageSize::Millimeter));
} else {
printer.setPageSize(QPageSize(m_paperSize));
}
#else
printer.setPaperSize(m_paperSize);
#endif
@@ -704,7 +702,11 @@ void MDIViewPage::print()
QPrinter printer(QPrinter::HighResolution);
printer.setFullPage(true);
#if QT_VERSION >= 0x050300
printer.setPageSize(QPageSize(m_paperSize));
if (m_paperSize == QPageSize::Custom) {
printer.setPageSize(QPageSize(QSizeF(pagewidth, pageheight), QPageSize::Millimeter));
} else {
printer.setPageSize(QPageSize(m_paperSize));
}
printer.setPageOrientation(m_orientation);
#else
printer.setPaperSize(m_paperSize);
@@ -721,7 +723,11 @@ void MDIViewPage::printPreview()
QPrinter printer(QPrinter::HighResolution);
printer.setFullPage(true);
#if QT_VERSION >= 0x050300
printer.setPageSize(QPageSize(m_paperSize));
if (m_paperSize == QPageSize::Custom) {
printer.setPageSize(QPageSize(QSizeF(pagewidth, pageheight), QPageSize::Millimeter));
} else {
printer.setPageSize(QPageSize(m_paperSize));
}
printer.setPageOrientation(m_orientation);
#else
printer.setPaperSize(m_paperSize);
@@ -750,13 +756,9 @@ void MDIViewPage::print(QPrinter* printer)
// a certain scaling effect can be observed and the content becomes smaller.
QPaintEngine::Type paintType = printer->paintEngine()->type();
if (printer->outputFormat() == QPrinter::NativeFormat) {
int w = printer->widthMM();
int h = printer->heightMM();
#if QT_VERSION >= 0x050300
QPageSize::PageSizeId psPrtCalcd = getPaperSize(w, h);
QPageSize::PageSizeId psPrtSetting = printer->pageLayout().pageSize().id();
#else
QPrinter::PaperSize psPrtCalcd = getPaperSize(w, h);
QPrinter::PaperSize psPrtSetting = printer->paperSize();
#endif
@@ -776,15 +778,7 @@ void MDIViewPage::print(QPrinter* printer)
if (ret != QMessageBox::Yes)
return;
}
else if (doPrint && psPrtCalcd != m_paperSize) {
int ret = QMessageBox::warning(this, tr("Different paper size"),
tr("The printer uses a different paper size than the drawing.\n"
"Do you want to continue?"),
QMessageBox::Yes | QMessageBox::No);
if (ret != QMessageBox::Yes)
return;
}
else if (doPrint && psPrtSetting != m_paperSize) {
if (doPrint && psPrtSetting != m_paperSize) {
int ret = QMessageBox::warning(this, tr("Different paper size"),
tr("The printer uses a different paper size than the drawing.\n"
"Do you want to continue?"),
@@ -850,11 +844,8 @@ void MDIViewPage::print(QPrinter* printer)
static_cast<void> (blockConnection(false));
}
#if QT_VERSION >= 0x050300
QPageSize::PageSizeId MDIViewPage::getPaperSize(int w, int h) const
#else
#if QT_VERSION < 0x050300
QPrinter::PaperSize MDIViewPage::getPaperSize(int w, int h) const
#endif
{
static const float paperSizes[][2] = {
{210, 297}, // A4
@@ -889,49 +880,29 @@ QPrinter::PaperSize MDIViewPage::getPaperSize(int w, int h) const
{279.4f, 431.8f} // Tabloid (29) causes trouble with orientation on PDF export
};
#if QT_VERSION >= 0x050300
QPageSize::PageSizeId ps = QPageSize::Custom;
#else
QPrinter::PaperSize ps = QPrinter::Custom;
#endif
for (int i=0; i<30; i++) {
if (std::abs(paperSizes[i][0]-w) <= 1 &&
std::abs(paperSizes[i][1]-h) <= 1) {
#if QT_VERSION >= 0x050300
ps = static_cast<QPageSize::PageSizeId>(i);
#else
ps = static_cast<QPrinter::PaperSize>(i);
#endif
break;
}
else //handle landscape & portrait w/h
if (std::abs(paperSizes[i][0]-h) <= 1 &&
std::abs(paperSizes[i][1]-w) <= 1) {
#if QT_VERSION >= 0x050300
ps = static_cast<QPageSize::PageSizeId>(i);
#else
ps = static_cast<QPrinter::PaperSize>(i);
#endif
break;
}
}
#if QT_VERSION >= 0x050300
if (ps == QPageSize::Ledger) { //check if really Tabloid
if (w < 431) {
ps = QPageSize::Tabloid;
}
}
#else
if (ps == QPrinter::Ledger) { //check if really Tabloid
if (w < 431) {
ps = QPrinter::Tabloid;
}
}
#endif
return ps;
}
#endif
PyObject* MDIViewPage::getPyObject()
{

View File

@@ -128,9 +128,7 @@ protected:
void contextMenuEvent(QContextMenuEvent *event);
void closeEvent(QCloseEvent*);
#if QT_VERSION >= 0x050300
QPageSize::PageSizeId getPaperSize(int w, int h) const;
#else
#if QT_VERSION < 0x050300
QPrinter::PaperSize getPaperSize(int w, int h) const;
#endif
@@ -171,6 +169,7 @@ private:
QPrinter::Orientation m_orientation;
QPrinter::PaperSize m_paperSize;
#endif
qreal pagewidth, pageheight;
ViewProviderPage *m_vpPage;
QList<QGraphicsItem*> m_qgSceneSelected; //items in selection order