Sketcher: Defining External geos.

This commit is contained in:
PaddleStroke
2024-11-07 18:58:31 +01:00
committed by WandererFan
parent 1c514f5a15
commit f3c79302c4
9 changed files with 523 additions and 114 deletions

View File

@@ -320,7 +320,6 @@ static bool inline checkSmallEdge(const Part::TopoShape &s) {
}
void SketchObject::buildShape() {
// Shape.setValue(solvedSketch.toShape());
// We use the following instead to map element names
@@ -1860,22 +1859,36 @@ int SketchObject::toggleConstruction(int GeoId)
// no need to check input data validity as this is an sketchobject managed operation.
Base::StateLocker lock(managedoperation, true);
const std::vector<Part::Geometry*>& vals = getInternalGeometry();
if (GeoId < 0 || GeoId >= int(vals.size()))
return -1;
if (GeoId >= 0) {
const std::vector<Part::Geometry*>& vals = getInternalGeometry();
if (GeoId >= int(vals.size())) {
return -1;
}
if (getGeometryFacade(GeoId)->isInternalAligned())
return -1;
if (getGeometryFacade(GeoId)->isInternalAligned()) {
return -1;
}
// While it may seem that there is not a need to trigger an update at this time, because the
// solver has its own copy of the geometry, and updateColors of the viewprovider may be
// triggered by the clearselection of the UI command, this won't update the elements widget, in
// the accumulative of actions it is judged that it is worth to trigger an update here.
// While it may seem that there is not a need to trigger an update at this time, because the
// solver has its own copy of the geometry, and updateColors of the viewprovider may be
// triggered by the clearselection of the UI command, this won't update the elements widget, in
// the accumulative of actions it is judged that it is worth to trigger an update here.
std::unique_ptr<Part::Geometry> geo(vals[GeoId]->clone());
auto gft = GeometryFacade::getFacade(geo.get());
gft->setConstruction(!gft->getConstruction());
this->Geometry.set1Value(GeoId, std::move(geo));
auto gft = GeometryFacade::getFacade(vals[GeoId]);
gft->setConstruction(!gft->getConstruction());
this->Geometry.touch();
}
else {
if (GeoId > GeoEnum::RefExt) {
return -1;
}
const std::vector<Part::Geometry*>& extGeos = getExternalGeometry();
auto geo = extGeos[-GeoId - 1];
auto egf = ExternalGeometryFacade::getFacade(geo);
egf->setFlag(ExternalGeometryExtension::Defining, !egf->testFlag(ExternalGeometryExtension::Defining));
this->ExternalGeo.touch();
}
solverNeedsUpdate = true;
signalSolverUpdate(); // FIXME: In theory this is totally redundant, but now seems required

View File

@@ -557,8 +557,19 @@ PyObject* SketchObjectPy::addExternal(PyObject* args)
{
char* ObjectName;
char* SubName;
if (!PyArg_ParseTuple(args, "ss", &ObjectName, &SubName)) {
return nullptr;
PyObject* defining; // this is an optional argument default false
bool isDefining;
if (!PyArg_ParseTuple(args, "ssO!", &ObjectName, &SubName, &PyBool_Type, &defining)) {
PyErr_Clear();
if (!PyArg_ParseTuple(args, "ss", &ObjectName, &SubName)) {
return nullptr;
}
else {
isDefining = false;
}
}
else {
isDefining = Base::asBoolean(defining);
}
// get the target object for the external link
@@ -579,7 +590,7 @@ PyObject* SketchObjectPy::addExternal(PyObject* args)
}
// add the external
if (skObj->addExternal(Obj, SubName) < 0) {
if (skObj->addExternal(Obj, SubName, isDefining) < 0) {
std::stringstream str;
str << "Not able to add external shape element " << SubName;
PyErr_SetString(PyExc_ValueError, str.str().c_str());

View File

@@ -115,6 +115,7 @@ CmdSketcherToggleConstruction::CmdSketcherToggleConstruction()
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreatePeriodicBSplineByInterpolation");
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompCreateBSpline");
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CarbonCopy");
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_External");
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_ToggleConstruction");
}
@@ -158,8 +159,7 @@ void CmdSketcherToggleConstruction::activated(int iMsg)
selection =
getSelection().getSelectionEx(nullptr, Sketcher::SketchObject::getClassTypeId());
Sketcher::SketchObject* Obj =
static_cast<Sketcher::SketchObject*>(selection[0].getObject());
auto* Obj = static_cast<Sketcher::SketchObject*>(selection[0].getObject());
// only one sketch with its subelements are allowed to be selected
if (selection.size() != 1) {
@@ -185,13 +185,13 @@ void CmdSketcherToggleConstruction::activated(int iMsg)
bool verticesonly = true;
for (const auto& subname : SubNames) {
if (subname.size() > 4 && subname.substr(0, 4) == "Edge") {
if ((subname.size() > 4 && subname.substr(0, 4) == "Edge")
|| (subname.size() > 12 && subname.substr(0, 12) == "ExternalEdge")) {
verticesonly = false;
}
}
for (std::vector<std::string>::const_iterator it = SubNames.begin(); it != SubNames.end();
++it) {
for (const auto& subname : SubNames) {
// It was decided to provide a special behaviour:
// Vertices will only be toggled to/from construction IF ONLY
// vertices are within the group.
@@ -205,13 +205,17 @@ void CmdSketcherToggleConstruction::activated(int iMsg)
// only handle edges
if (it->size() > 4 && it->substr(0, 4) == "Edge") {
int GeoId = std::atoi(it->substr(4, 4000).c_str()) - 1;
if (subname.size() > 4 && subname.substr(0, 4) == "Edge") {
int geoId = std::atoi(subname.substr(4, 4000).c_str()) - 1;
// issue the actual commands to toggle
Gui::cmdAppObjectArgs(selection[0].getObject(), "toggleConstruction(%d) ", GeoId);
Gui::cmdAppObjectArgs(Obj, "toggleConstruction(%d) ", geoId);
}
else if (verticesonly && it->size() > 6 && it->substr(0, 6) == "Vertex") {
int vertexId = std::atoi(it->substr(6, 4000).c_str()) - 1;
else if (subname.size() > 12 && subname.substr(0, 12) == "ExternalEdge") {
int geoId = GeoEnum::RefExt - std::atoi(subname.substr(12, 4000).c_str()) + 1;
Gui::cmdAppObjectArgs(Obj, "toggleConstruction(%d) ", geoId);
}
else if (verticesonly && subname.size() > 6 && subname.substr(0, 6) == "Vertex") {
int vertexId = std::atoi(subname.substr(6, 4000).c_str()) - 1;
int geoId;
PointPos pos;
@@ -221,9 +225,7 @@ void CmdSketcherToggleConstruction::activated(int iMsg)
if (geo && geo->is<Part::GeomPoint>()) {
// issue the actual commands to toggle
Gui::cmdAppObjectArgs(selection[0].getObject(),
"toggleConstruction(%d) ",
geoId);
Gui::cmdAppObjectArgs(Obj, "toggleConstruction(%d) ", geoId);
}
}
}

View File

@@ -1436,7 +1436,7 @@ public:
// ======================================================================================
DEF_STD_CMD_A(CmdSketcherExternal)
DEF_STD_CMD_AU(CmdSketcherExternal)
CmdSketcherExternal::CmdSketcherExternal()
: Command("Sketcher_External")
@@ -1452,6 +1452,8 @@ CmdSketcherExternal::CmdSketcherExternal()
eType = ForEdit;
}
CONSTRUCTION_UPDATE_ACTION(CmdSketcherExternal, "Sketcher_External")
void CmdSketcherExternal::activated(int iMsg)
{
Q_UNUSED(iMsg);

View File

@@ -163,9 +163,11 @@ public:
Gui::Command::openCommand(
QT_TRANSLATE_NOOP("Command", "Add external geometry"));
Gui::cmdAppObjectArgs(sketchgui->getObject(),
"addExternal(\"%s\",\"%s\")",
"addExternal(\"%s\",\"%s\", %s)",
msg.pObjectName,
msg.pSubName);
msg.pSubName,
isConstructionMode() ? "False" : "True");
Gui::Command::commitCommand();
// adding external geometry does not require a solve() per se (the DoF is the

View File

@@ -421,6 +421,9 @@ void EditModeGeometryCoinManager::updateGeometryColor(const GeoListFacade& geoli
if (egf->testFlag(ExternalGeometryExtension::Missing)) {
color[i] = drawingParameters.InvalidSketchColor;
}
else if (egf->testFlag(ExternalGeometryExtension::Defining)) {
color[i] = drawingParameters.CurveColor;
}
else {
color[i] = drawingParameters.CurveExternalColor;
}

View File

@@ -199,6 +199,7 @@
<file>icons/geometry/Sketcher_CreateTriangle_Constr.svg</file>
<file>icons/geometry/Sketcher_Extend.svg</file>
<file>icons/geometry/Sketcher_External.svg</file>
<file>icons/geometry/Sketcher_External_Constr.svg</file>
<file>icons/geometry/Sketcher_Split.svg</file>
<file>icons/geometry/Sketcher_ToggleConstruction.svg</file>
<file>icons/geometry/Sketcher_ToggleConstruction_Constr.svg</file>

View File

@@ -1,18 +1,41 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="64"
height="64"
id="svg2869"
version="1.1"
viewBox="0 0 64 64"
sodipodi:docname="Sketcher_External.svg"
inkscape:version="1.1-beta1 (77e7b44db3, 2021-03-28)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview71"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
objecttolerance="10.0"
gridtolerance="10.0"
guidetolerance="10.0"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="11.765625"
inkscape:cx="32"
inkscape:cy="32"
inkscape:window-width="3840"
inkscape:window-height="1571"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="svg2869" />
<defs
id="defs2871">
<linearGradient
@@ -280,84 +303,73 @@
</rdf:RDF>
</metadata>
<g
id="layer3"
style="display:inline">
<g
id="layer1">
<g
id="g3849"
transform="translate(-60)">
<path
id="path3023"
d="m 63,39 v 20 l 32,2 V 41 Z"
style="fill:url(#linearGradient3856);fill-opacity:1;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
id="path3025"
d="M 95,61 115,51 V 31 L 95,41 Z"
style="fill:url(#linearGradient3858);fill-opacity:1;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
id="path3027"
d="M 63,39 83,29 115,31 95,41 Z"
style="fill:#729fcf;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
id="path3023-1"
d="M 65,41 V 57.1 L 93,59 V 42.836 Z"
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path3025-7"
d="M 97.000001,57.8 113,49.767 V 34.2 L 97,42 Z"
style="fill:none;stroke:#3465a4;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g26"
transform="translate(0,0.89514509)">
<path
style="fill:none;stroke:#0b1521;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 22,8 34,2"
id="path3921" />
<path
style="fill:none;stroke:#3465a4;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 22,8 34,2"
id="path3921-4" />
<path
style="display:inline;fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 22.3125,6.9998744 34,2"
id="path11" />
</g>
<g
id="g3971"
transform="rotate(34.600775,37.262309,14.601933)">
<path
id="path3941"
d="m 40,28 -3.863704,-1.035276 2.070553,-7.727407 -3.863704,-1.035276 7.607289,-5.208567 3.983821,8.314395 -3.863703,-1.035276 z"
style="fill:url(#linearGradient3978);fill-opacity:1;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
</g>
</g>
<g
transform="matrix(0.77869459,0,0,0.77869445,36.54595,1.1036616)"
id="g34"
style="stroke-width:1.2842">
<path
style="fill:none;stroke:#2e0000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path33"
d="M -26.310778,5.3580033 A 8.3519646,8.3515832 0.02039876 1 1 -13.623399,16.222662 8.3519646,8.3515832 0.02039876 1 1 -26.310778,5.3580033 Z" />
<path
style="fill:url(#linearGradient34);fill-opacity:1;stroke:#ef2929;stroke-width:2.56842;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path34"
d="m -24.358888,7.0362241 a 5.782493,5.7773415 0 1 1 8.784093,7.5158349 5.782493,5.7773415 0 0 1 -8.784093,-7.5158349 z" />
</g>
<g
transform="matrix(0.77869459,0,0,0.77869445,70.129085,1.6640417)"
id="g25"
style="stroke-width:1.2842">
<path
style="fill:none;stroke:#2e0000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path24"
d="M -26.310778,5.3580033 A 8.3519646,8.3515832 0.02039876 1 1 -13.623399,16.222662 8.3519646,8.3515832 0.02039876 1 1 -26.310778,5.3580033 Z" />
<path
style="fill:url(#linearGradient25);fill-opacity:1;stroke:#ef2929;stroke-width:2.56842;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path25"
d="m -24.358888,7.0362241 a 5.782493,5.7773415 0 1 1 8.784093,7.5158349 5.782493,5.7773415 0 0 1 -8.784093,-7.5158349 z" />
</g>
id="g3849"
transform="translate(-60)">
<path
id="path3023"
d="m 63,39 v 20 l 32,2 V 41 Z"
style="fill:url(#linearGradient3856);fill-opacity:1;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
id="path3025"
d="M 95,61 115,51 V 31 L 95,41 Z"
style="fill:url(#linearGradient3858);fill-opacity:1;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
id="path3027"
d="M 63,39 83,29 115,31 95,41 Z"
style="fill:#729fcf;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
id="path3023-1"
d="M 65,41 V 57.1 L 93,59 V 42.836 Z"
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path3025-7"
d="M 97.000001,57.8 113,49.767 V 34.2 L 97,42 Z"
style="fill:none;stroke:#3465a4;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
style="fill:none;stroke:#151819;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 22,8.8951451 56,10.895145"
id="path3921" />
<path
style="fill:none;stroke:#d3d7cf;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 22,8.8951451 56,10.895145"
id="path3921-4" />
<path
style="display:inline;fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 22.3125,7.8950195 34,2"
id="path11" />
<g
id="g3971"
transform="rotate(34.600775,37.262309,14.601933)">
<path
id="path3941"
d="m 40,28 -3.863704,-1.035276 2.070553,-7.727407 -3.863704,-1.035276 7.607289,-5.208567 3.983821,8.314395 -3.863703,-1.035276 z"
style="fill:url(#linearGradient3978);fill-opacity:1;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
</g>
<g
transform="matrix(0.77869459,0,0,0.77869445,36.54595,1.1036616)"
id="g34"
style="stroke-width:1.2842">
<path
style="fill:none;stroke:#2e0000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path33"
d="M -26.310778,5.3580033 A 8.3519646,8.3515832 0.02039876 1 1 -13.623399,16.222662 8.3519646,8.3515832 0.02039876 1 1 -26.310778,5.3580033 Z" />
<path
style="fill:url(#linearGradient34);fill-opacity:1;stroke:#ef2929;stroke-width:2.56842;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path34"
d="m -24.358888,7.0362241 a 5.782493,5.7773415 0 1 1 8.784093,7.5158349 5.782493,5.7773415 0 0 1 -8.784093,-7.5158349 z" />
</g>
<g
transform="matrix(0.77869459,0,0,0.77869445,70.129085,1.6640417)"
id="g25"
style="stroke-width:1.2842">
<path
style="fill:none;stroke:#2e0000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path24"
d="M -26.310778,5.3580033 A 8.3519646,8.3515832 0.02039876 1 1 -13.623399,16.222662 8.3519646,8.3515832 0.02039876 1 1 -26.310778,5.3580033 Z" />
<path
style="fill:url(#linearGradient25);fill-opacity:1;stroke:#ef2929;stroke-width:2.56842;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path25"
d="m -24.358888,7.0362241 a 5.782493,5.7773415 0 1 1 8.784093,7.5158349 5.782493,5.7773415 0 0 1 -8.784093,-7.5158349 z" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,363 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="64"
height="64"
id="svg2869"
version="1.1"
viewBox="0 0 64 64"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs2871">
<linearGradient
id="linearGradient5">
<stop
style="stop-color:#ef2929;stop-opacity:1;"
offset="0"
id="stop19" />
<stop
style="stop-color:#ef2929;stop-opacity:0;"
offset="1"
id="stop20" />
</linearGradient>
<linearGradient
id="swatch18">
<stop
style="stop-color:#ef2929;stop-opacity:1;"
offset="0"
id="stop18" />
</linearGradient>
<linearGradient
id="swatch15">
<stop
style="stop-color:#3d0000;stop-opacity:1;"
offset="0"
id="stop15" />
</linearGradient>
<linearGradient
id="linearGradient5-1">
<stop
style="stop-color:#ef2929;stop-opacity:1;"
offset="0"
id="stop5" />
<stop
style="stop-color:#ef2929;stop-opacity:0;"
offset="1"
id="stop6" />
</linearGradient>
<linearGradient
id="linearGradient3836-9">
<stop
style="stop-color:#a40000;stop-opacity:1"
offset="0"
id="stop3838-8" />
<stop
style="stop-color:#ef2929;stop-opacity:1"
offset="1"
id="stop3840-1" />
</linearGradient>
<linearGradient
id="linearGradient3836-9-3">
<stop
style="stop-color:#a40000;stop-opacity:1"
offset="0"
id="stop3838-8-5" />
<stop
style="stop-color:#ef2929;stop-opacity:1"
offset="1"
id="stop3840-1-6" />
</linearGradient>
<linearGradient
y2="5"
x2="-22"
y1="18"
x1="-18"
gradientUnits="userSpaceOnUse"
id="linearGradient3082"
xlink:href="#linearGradient3836-9-3" />
<linearGradient
id="linearGradient3836-9-7">
<stop
style="stop-color:#a40000;stop-opacity:1"
offset="0"
id="stop3838-8-0" />
<stop
style="stop-color:#ef2929;stop-opacity:1"
offset="1"
id="stop3840-1-9" />
</linearGradient>
<linearGradient
y2="5"
x2="-22"
y1="18"
x1="-18"
gradientUnits="userSpaceOnUse"
id="linearGradient3082-3"
xlink:href="#linearGradient3836-9-7" />
<linearGradient
xlink:href="#linearGradient3836-9-3"
id="linearGradient3801-1-3"
gradientUnits="userSpaceOnUse"
x1="-18"
y1="18"
x2="-22"
y2="5"
gradientTransform="matrix(0.76342439,0,0,0.75750425,-4.596389,2.7525637)" />
<linearGradient
xlink:href="#linearGradient3836-9-3"
id="linearGradient3801-1-3-2"
gradientUnits="userSpaceOnUse"
x1="-18"
y1="18"
x2="-22"
y2="5"
gradientTransform="matrix(0.84956703,0,0,0.84301394,-2.927337,1.7790378)" />
<linearGradient
xlink:href="#linearGradient3836-9-3"
id="linearGradient34"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.82607043,0,0,0.82533448,-4.0098079,1.346708)"
x1="-18"
y1="18"
x2="-22"
y2="5" />
<linearGradient
xlink:href="#linearGradient3838"
id="linearGradient3844"
x1="36"
y1="1039.3622"
x2="32"
y2="1003.3622"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(2.0563921e-6,-988.36218)" />
<linearGradient
id="linearGradient3838">
<stop
style="stop-color:#d3d7cf;stop-opacity:1;"
offset="0"
id="stop3840" />
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3842" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3830"
id="linearGradient3836"
x1="36"
y1="1037.3622"
x2="32"
y2="1005.3622"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(2.0563921e-6,-988.36218)" />
<linearGradient
id="linearGradient3830">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3832" />
<stop
style="stop-color:#d3d7cf;stop-opacity:1;"
offset="1"
id="stop3834" />
</linearGradient>
<linearGradient
x1="10.504496"
y1="16.48678"
x2="5.9349072"
y2="1.6356685"
id="linearGradient-1"
gradientTransform="scale(0.99999018,1.0000098)"
gradientUnits="userSpaceOnUse">
<stop
stop-color="#A40000"
offset="0%"
id="stop6-9" />
<stop
stop-color="#EF2929"
offset="100%"
id="stop8" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3815"
id="linearGradient3856"
gradientUnits="userSpaceOnUse"
x1="80"
y1="58"
x2="79"
y2="42" />
<linearGradient
id="linearGradient3815">
<stop
style="stop-color:#3465a4;stop-opacity:1"
offset="0"
id="stop3817" />
<stop
style="stop-color:#729fcf;stop-opacity:1"
offset="1"
id="stop3819" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3841"
id="linearGradient3858"
gradientUnits="userSpaceOnUse"
x1="109"
y1="51"
x2="105"
y2="38" />
<linearGradient
id="linearGradient3841">
<stop
style="stop-color:#204a87;stop-opacity:1"
offset="0"
id="stop3843" />
<stop
style="stop-color:#3465a4;stop-opacity:1"
offset="1"
id="stop3845" />
</linearGradient>
<linearGradient
y2="5"
x2="-22"
y1="18"
x1="-18"
gradientTransform="matrix(0.77114848,0,0,0.77113937,-4.4090973,2.5859051)"
gradientUnits="userSpaceOnUse"
id="linearGradient3898"
xlink:href="#linearGradient3836-9-3" />
<linearGradient
xlink:href="#linearGradient3815"
id="linearGradient3978"
gradientUnits="userSpaceOnUse"
x1="-15"
y1="37"
x2="-19"
y2="37"
gradientTransform="rotate(15,69.468151,244.38323)" />
<linearGradient
xlink:href="#linearGradient3836-9-3"
id="linearGradient25"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.82607043,0,0,0.82533448,-4.0098079,1.346708)"
x1="-18"
y1="18"
x2="-22"
y2="5" />
</defs>
<metadata
id="metadata2874">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>[maxwxyz]</dc:title>
</cc:Agent>
</dc:creator>
<dc:relation>https://www.freecad.org/wiki/index.php?title=Artwork</dc:relation>
<dc:publisher>
<cc:Agent>
<dc:title>FreeCAD</dc:title>
</cc:Agent>
</dc:publisher>
<dc:identifier>FreeCAD/src/Mod/Sketcher/Gui/Resources/icons/Sketcher_CreateArc.svg</dc:identifier>
<dc:rights>
<cc:Agent>
<dc:title>FreeCAD LGPL2+</dc:title>
</cc:Agent>
</dc:rights>
<dc:date>2023-12-19</dc:date>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer3"
style="display:inline">
<g
id="layer1">
<g
id="g3849"
transform="translate(-60)">
<path
id="path3023"
d="m 63,39 v 20 l 32,2 V 41 Z"
style="fill:url(#linearGradient3856);fill-opacity:1;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
id="path3025"
d="M 95,61 115,51 V 31 L 95,41 Z"
style="fill:url(#linearGradient3858);fill-opacity:1;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
id="path3027"
d="M 63,39 83,29 115,31 95,41 Z"
style="fill:#729fcf;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
id="path3023-1"
d="M 65,41 V 57.1 L 93,59 V 42.836 Z"
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path3025-7"
d="M 97.000001,57.8 113,49.767 V 34.2 L 97,42 Z"
style="fill:none;stroke:#3465a4;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g26"
transform="translate(0,0.89514509)">
<path
style="fill:none;stroke:#0b1521;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 22,8 34,2"
id="path3921" />
<path
style="fill:none;stroke:#3465a4;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 22,8 34,2"
id="path3921-4" />
<path
style="display:inline;fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 22.3125,6.9998744 34,2"
id="path11" />
</g>
<g
id="g3971"
transform="rotate(34.600775,37.262309,14.601933)">
<path
id="path3941"
d="m 40,28 -3.863704,-1.035276 2.070553,-7.727407 -3.863704,-1.035276 7.607289,-5.208567 3.983821,8.314395 -3.863703,-1.035276 z"
style="fill:url(#linearGradient3978);fill-opacity:1;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
</g>
</g>
<g
transform="matrix(0.77869459,0,0,0.77869445,36.54595,1.1036616)"
id="g34"
style="stroke-width:1.2842">
<path
style="fill:none;stroke:#2e0000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path33"
d="M -26.310778,5.3580033 A 8.3519646,8.3515832 0.02039876 1 1 -13.623399,16.222662 8.3519646,8.3515832 0.02039876 1 1 -26.310778,5.3580033 Z" />
<path
style="fill:url(#linearGradient34);fill-opacity:1;stroke:#ef2929;stroke-width:2.56842;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path34"
d="m -24.358888,7.0362241 a 5.782493,5.7773415 0 1 1 8.784093,7.5158349 5.782493,5.7773415 0 0 1 -8.784093,-7.5158349 z" />
</g>
<g
transform="matrix(0.77869459,0,0,0.77869445,70.129085,1.6640417)"
id="g25"
style="stroke-width:1.2842">
<path
style="fill:none;stroke:#2e0000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path24"
d="M -26.310778,5.3580033 A 8.3519646,8.3515832 0.02039876 1 1 -13.623399,16.222662 8.3519646,8.3515832 0.02039876 1 1 -26.310778,5.3580033 Z" />
<path
style="fill:url(#linearGradient25);fill-opacity:1;stroke:#ef2929;stroke-width:2.56842;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path25"
d="m -24.358888,7.0362241 a 5.782493,5.7773415 0 1 1 8.784093,7.5158349 5.782493,5.7773415 0 0 1 -8.784093,-7.5158349 z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB