ArcSlot DSH : implement the Arc slot tool with tool parameters support.

This commit is contained in:
Paddle
2023-11-03 18:40:51 +01:00
committed by abdullahtahiriyo
parent dce0deca9b
commit 2f30b63b9d
12 changed files with 2679 additions and 5 deletions

View File

@@ -65,6 +65,7 @@ SET(SketcherGui_SRCS
DrawSketchHandlerArcOfEllipse.h
DrawSketchHandlerArcOfHyperbola.h
DrawSketchHandlerArcOfParabola.h
DrawSketchHandlerArcSlot.h
DrawSketchHandlerBSpline.h
DrawSketchHandlerBSplineByInterpolation.h
DrawSketchHandlerPoint.h

View File

@@ -85,7 +85,9 @@ CmdSketcherToggleConstruction::CmdSketcherToggleConstruction()
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreateOblong");
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompCreateRectangles");
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreatePolyline");
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreateArcSlot");
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreateSlot");
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompSlot");
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreateArc");
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_Create3PointArc");
rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompCreateArc");

View File

@@ -55,6 +55,7 @@
#include "DrawSketchHandlerArcOfEllipse.h"
#include "DrawSketchHandlerArcOfHyperbola.h"
#include "DrawSketchHandlerArcOfParabola.h"
#include "DrawSketchHandlerArcSlot.h"
#include "DrawSketchHandlerBSpline.h"
#include "DrawSketchHandlerBSplineByInterpolation.h"
#include "DrawSketchHandlerCarbonCopy.h"
@@ -1737,10 +1738,58 @@ bool CmdSketcherCarbonCopy::isActive()
return isCommandActive(getActiveGuiDocument());
}
// Comp for slot tools =============================================
/**
* Create Slot
*/
class CmdSketcherCompSlot: public Gui::GroupCommand
{
public:
CmdSketcherCompSlot()
: GroupCommand("Sketcher_CompSlot")
{
sAppModule = "Sketcher";
sGroup = "Sketcher";
sMenuText = QT_TR_NOOP("Slots");
sToolTipText = QT_TR_NOOP("Slot tools.");
sWhatsThis = "Sketcher_CompSlot";
sStatusTip = sToolTipText;
eType = ForEdit;
setCheckable(false);
addCommand("Sketcher_CreateSlot");
addCommand("Sketcher_CreateArcSlot");
}
void updateAction(int mode) override
{
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(getAction());
if (!pcAction) {
return;
}
QList<QAction*> al = pcAction->actions();
int index = pcAction->property("defaultAction").toInt();
switch (static_cast<GeometryCreationMode>(mode)) {
case GeometryCreationMode::Normal:
al[0]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateSlot"));
al[1]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateArcSlot"));
getAction()->setIcon(al[index]->icon());
break;
case GeometryCreationMode::Construction:
al[0]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateSlot_Constr"));
al[1]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateArcSlot_Constr"));
getAction()->setIcon(al[index]->icon());
break;
}
}
const char* className() const override
{
return "CmdSketcherCompSlot";
}
};
/* Create Slot =============================================================*/
DEF_STD_CMD_AU(CmdSketcherCreateSlot)
@@ -1771,6 +1820,37 @@ bool CmdSketcherCreateSlot::isActive()
return isCommandActive(getActiveGuiDocument());
}
/* Create Arc Slot =========================================================*/
DEF_STD_CMD_AU(CmdSketcherCreateArcSlot)
CmdSketcherCreateArcSlot::CmdSketcherCreateArcSlot()
: Command("Sketcher_CreateArcSlot")
{
sAppModule = "Sketcher";
sGroup = "Sketcher";
sMenuText = QT_TR_NOOP("Create arc slot");
sToolTipText = QT_TR_NOOP("Create an arc slot in the sketch");
sWhatsThis = "Sketcher_CreateArcSlot";
sStatusTip = sToolTipText;
sPixmap = "Sketcher_CreateArcSlot";
sAccel = "G, S, 2";
eType = ForEdit;
}
CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateArcSlot, "Sketcher_CreateArcSlot")
void CmdSketcherCreateArcSlot::activated(int iMsg)
{
Q_UNUSED(iMsg);
ActivateHandler(getActiveGuiDocument(), new DrawSketchHandlerArcSlot());
}
bool CmdSketcherCreateArcSlot::isActive(void)
{
return isCommandActive(getActiveGuiDocument());
}
/* Create Regular Polygon ==============================================*/
DEF_STD_CMD_AU(CmdSketcherCreateTriangle)
@@ -2213,6 +2293,8 @@ void CreateSketcherCommandsCreateGeo()
rcCmdMgr.addCommand(new CmdSketcherCreateRegularPolygon());
rcCmdMgr.addCommand(new CmdSketcherCompCreateRectangles());
rcCmdMgr.addCommand(new CmdSketcherCreateSlot());
rcCmdMgr.addCommand(new CmdSketcherCreateArcSlot());
rcCmdMgr.addCommand(new CmdSketcherCompSlot());
rcCmdMgr.addCommand(new CmdSketcherCompCreateFillets());
rcCmdMgr.addCommand(new CmdSketcherCreateFillet());
rcCmdMgr.addCommand(new CmdSketcherCreatePointFillet());

View File

@@ -0,0 +1,935 @@
/***************************************************************************
* Copyright (c) 2023 Ondsel <development@ondsel.com> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#ifndef SKETCHERGUI_DrawSketchHandlerArcSlot_H
#define SKETCHERGUI_DrawSketchHandlerArcSlot_H
#include <QApplication>
#include <Gui/BitmapFactory.h>
#include <Gui/Notifications.h>
#include <Gui/Command.h>
#include <Gui/CommandT.h>
#include <Mod/Sketcher/App/SketchObject.h>
#include "DrawSketchDefaultWidgetController.h"
#include "DrawSketchControllableHandler.h"
#include "GeometryCreationMode.h"
#include "Utils.h"
namespace SketcherGui
{
extern GeometryCreationMode geometryCreationMode; // defined in CommandCreateGeo.cpp
class DrawSketchHandlerArcSlot;
namespace ConstructionMethods
{
enum class ArcSlotConstructionMethod
{
ArcSlot,
RectangleSlot,
End // Must be the last one
};
}
using DSHArcSlotController =
DrawSketchDefaultWidgetController<DrawSketchHandlerArcSlot,
StateMachines::FourSeekEnd,
/*PAutoConstraintSize =*/3,
/*OnViewParametersT =*/OnViewParameters<6, 6>,
/*WidgetParametersT =*/WidgetParameters<0, 0>,
/*WidgetCheckboxesT =*/WidgetCheckboxes<0, 0>,
/*WidgetComboboxesT =*/WidgetComboboxes<1, 1>,
ConstructionMethods::ArcSlotConstructionMethod,
/*bool PFirstComboboxIsConstructionMethod =*/true>;
using DSHArcSlotControllerBase = DSHArcSlotController::ControllerBase;
using DrawSketchHandlerArcSlotBase = DrawSketchControllableHandler<DSHArcSlotController>;
class DrawSketchHandlerArcSlot: public DrawSketchHandlerArcSlotBase
{
friend DSHArcSlotController;
friend DSHArcSlotControllerBase;
public:
explicit DrawSketchHandlerArcSlot(ConstructionMethod constrMethod = ConstructionMethod::ArcSlot)
: DrawSketchHandlerArcSlotBase(constrMethod)
, startAngle(0.)
, startAngleBackup(0.)
, endAngle(0.)
, arcAngle(0.)
{}
~DrawSketchHandlerArcSlot() override = default;
private:
void updateDataAndDrawToPosition(Base::Vector2d onSketchPos) override
{
switch (state()) {
case SelectMode::SeekFirst: {
toolWidgetManager.drawPositionAtCursor(onSketchPos);
centerPoint = onSketchPos;
if (seekAutoConstraint(sugConstraints[0], onSketchPos, Base::Vector2d(0.f, 0.f))) {
renderSuggestConstraintsCursor(sugConstraints[0]);
return;
}
} break;
case SelectMode::SeekSecond: {
toolWidgetManager.drawDirectionAtCursor(onSketchPos, centerPoint);
startPoint = onSketchPos;
startAngle = (startPoint - centerPoint).Angle();
startAngleBackup = startAngle;
radius = (startPoint - centerPoint).Length();
CreateAndDrawShapeGeometry();
if (seekAutoConstraint(sugConstraints[1], onSketchPos, Base::Vector2d(0.f, 0.f))) {
renderSuggestConstraintsCursor(sugConstraints[1]);
return;
}
} break;
case SelectMode::SeekThird: {
endPoint = centerPoint + (onSketchPos - centerPoint).Normalize() * radius;
if (constructionMethod() == DrawSketchHandlerArcSlot::ConstructionMethod::ArcSlot) {
r = radius / 10;
}
else {
r = radius * 1.2;
}
startAngle = startAngleBackup;
double angle1 = (onSketchPos - centerPoint).Angle() - startAngle;
double angle2 = angle1 + (angle1 < 0. ? 2 : -2) * M_PI;
arcAngle = abs(angle1 - arcAngle) < abs(angle2 - arcAngle) ? angle1 : angle2;
reverseIfNecessary();
CreateAndDrawShapeGeometry();
toolWidgetManager.drawDoubleAtCursor(onSketchPos, arcAngle, Base::Unit::Angle);
if (seekAutoConstraint(sugConstraints[2], onSketchPos, Base::Vector2d(0.0, 0.0))) {
renderSuggestConstraintsCursor(sugConstraints[2]);
return;
}
} break;
case SelectMode::SeekFourth: {
if (constructionMethod() == DrawSketchHandlerArcSlot::ConstructionMethod::ArcSlot) {
r = std::min(radius, fabs(radius - (onSketchPos - centerPoint).Length()));
}
else {
r = (onSketchPos - centerPoint).Length();
}
toolWidgetManager.drawDoubleAtCursor(onSketchPos, r);
CreateAndDrawShapeGeometry();
} break;
default:
break;
}
}
void executeCommands() override
{
try {
createShape(false);
Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Add sketch arc slot"));
commandAddShapeGeometryAndConstraints();
Gui::Command::commitCommand();
}
catch (const Base::Exception& e) {
Gui::NotifyError(sketchgui,
QT_TRANSLATE_NOOP("Notifications", "Error"),
QT_TRANSLATE_NOOP("Notifications", "Failed to add arc slot"));
Gui::Command::abortCommand();
THROWM(Base::RuntimeError,
QT_TRANSLATE_NOOP(
"Notifications",
"Tool execution aborted") "\n") // This prevents constraints from being
// applied on non existing geometry
}
}
void generateAutoConstraints() override
{
auto& ac2 = sugConstraints[1];
auto& ac3 = sugConstraints[2];
generateAutoConstraintsOnElement(
sugConstraints[0],
getHighestCurveIndex() - 3,
Sketcher::PointPos::mid); // add auto constraints for the center point
if (constructionMethod() == ConstructionMethod::ArcSlot) {
generateAutoConstraintsOnElement(ac2,
getHighestCurveIndex() - 1,
Sketcher::PointPos::mid);
generateAutoConstraintsOnElement(ac3, getHighestCurveIndex(), Sketcher::PointPos::mid);
}
else {
generateAutoConstraintsOnElement(ac2,
getHighestCurveIndex() - 3,
(arcAngle > 0) ? Sketcher::PointPos::start
: Sketcher::PointPos::end);
generateAutoConstraintsOnElement(ac3,
getHighestCurveIndex() - 3,
(arcAngle > 0) ? Sketcher::PointPos::end
: Sketcher::PointPos::start);
}
// Ensure temporary autoconstraints do not generate a redundancy and that the geometry
// parameters are accurate This is particularly important for adding widget mandated
// constraints.
removeRedundantAutoConstraints();
}
void createAutoConstraints() override
{
// execute python command to create autoconstraints
createGeneratedAutoConstraints(true);
sugConstraints[0].clear();
sugConstraints[1].clear();
sugConstraints[2].clear();
}
std::string getToolName() const override
{
return "DSH_ArcSlot";
}
QString getCrosshairCursorSVGName() const override
{
if (constructionMethod() == DrawSketchHandlerArcSlot::ConstructionMethod::ArcSlot) {
return QString::fromLatin1("Sketcher_Pointer_Create_ArcSlot");
}
else {
return QString::fromLatin1("Sketcher_Pointer_Create_RectangleSlot");
}
}
std::unique_ptr<QWidget> createWidget() const override
{
return std::make_unique<SketcherToolDefaultWidget>();
}
bool isWidgetVisible() const override
{
return true;
};
QPixmap getToolIcon() const override
{
return Gui::BitmapFactory().pixmap("Sketcher_CreateArcSlot");
}
QString getToolWidgetText() const override
{
return QString(QObject::tr("Arc Slot parameters"));
}
bool canGoToNextMode() override
{
// Prevent validation of null arc.
if (state() == SelectMode::SeekSecond && radius < Precision::Confusion()) {
return false;
}
if (state() == SelectMode::SeekThird && fabs(arcAngle) < Precision::Confusion()) {
return false;
}
if (state() == SelectMode::SeekFourth) {
if (constructionMethod() == DrawSketchHandlerArcSlot::ConstructionMethod::ArcSlot) {
if (r < Precision::Confusion()) {
return false;
}
}
else {
if (fabs(radius - r) < Precision::Confusion()) {
return false;
}
}
}
return true;
}
void angleSnappingControl() override
{
if (state() == SelectMode::SeekSecond || state() == SelectMode::SeekThird) {
setAngleSnapping(true, centerPoint);
}
else {
setAngleSnapping(false);
}
}
void createShape(bool onlyeditoutline) override
{
ShapeGeometry.clear();
if (radius < Precision::Confusion()) {
return;
}
if (state() == SelectMode::SeekSecond) {
addCircleToShapeGeometry(toVector3d(centerPoint), radius, isConstructionMode());
}
else {
if (fabs(arcAngle) < Precision::Confusion()) {
return;
}
if (state() == SelectMode::SeekFourth && r < Precision::Confusion()) {
return;
}
if (constructionMethod() == DrawSketchHandlerArcSlot::ConstructionMethod::ArcSlot) {
addArcToShapeGeometry(toVector3d(centerPoint),
startAngle,
endAngle,
radius + r,
isConstructionMode());
addArcToShapeGeometry(toVector3d(startPoint),
angleReversed ? endAngle : startAngle + M_PI,
angleReversed ? endAngle + M_PI : startAngle + 2 * M_PI,
r,
isConstructionMode());
addArcToShapeGeometry(toVector3d(endPoint),
angleReversed ? startAngle + M_PI : endAngle,
angleReversed ? startAngle + 2 * M_PI : M_PI + endAngle,
r,
isConstructionMode());
if (radius - r > Precision::Confusion()) {
addArcToShapeGeometry(toVector3d(centerPoint),
startAngle,
endAngle,
radius - r,
isConstructionMode());
}
}
else {
Part::GeomArcOfCircle* arc1 = addArcToShapeGeometry(toVector3d(centerPoint),
startAngle,
endAngle,
radius,
isConstructionMode());
Base::Vector3d p11 = arc1->getStartPoint();
Base::Vector3d p12 = arc1->getEndPoint();
if (r > Precision::Confusion()) {
auto arc2 = std::make_unique<Part::GeomArcOfCircle>();
arc2->setRadius(r);
arc2->setRange(startAngle, endAngle, true);
arc2->setCenter(toVector3d(centerPoint));
Sketcher::GeometryFacade::setConstruction(arc2.get(), isConstructionMode());
Base::Vector3d p21 = arc2->getStartPoint();
Base::Vector3d p22 = arc2->getEndPoint();
addLineToShapeGeometry(p11, p21, isConstructionMode());
addLineToShapeGeometry(p12, p22, isConstructionMode());
// arc2 is added last to make it easy if it does not exist
ShapeGeometry.push_back(std::move(arc2));
}
else {
addLineToShapeGeometry(p11, toVector3d(centerPoint), isConstructionMode());
addLineToShapeGeometry(p12, toVector3d(centerPoint), isConstructionMode());
}
}
}
if (!onlyeditoutline) {
int firstCurve = getHighestCurveIndex() + 1;
if (constructionMethod() == DrawSketchHandlerArcSlot::ConstructionMethod::ArcSlot) {
bool allArcs = fabs(radius - r) > Precision::Confusion();
Sketcher::PointPos pos1 =
angleReversed ? Sketcher::PointPos::start : Sketcher::PointPos::end;
Sketcher::PointPos pos2 =
angleReversed ? Sketcher::PointPos::end : Sketcher::PointPos::start;
if (allArcs) {
addToShapeConstraints(Sketcher::Coincident,
firstCurve,
Sketcher::PointPos::mid,
firstCurve + 3,
Sketcher::PointPos::mid);
addToShapeConstraints(Sketcher::Tangent,
firstCurve + 3,
pos1,
firstCurve + 2,
pos1);
addToShapeConstraints(Sketcher::Tangent,
firstCurve + 3,
pos2,
firstCurve + 1,
pos2);
}
else {
addToShapeConstraints(Sketcher::Coincident,
firstCurve,
Sketcher::PointPos::mid,
firstCurve + 1,
pos2);
addToShapeConstraints(Sketcher::Coincident,
firstCurve,
Sketcher::PointPos::mid,
firstCurve + 2,
pos1);
}
addToShapeConstraints(Sketcher::Tangent, firstCurve, pos1, firstCurve + 2, pos2);
addToShapeConstraints(Sketcher::Tangent, firstCurve, pos2, firstCurve + 1, pos1);
}
else {
bool allGeos = r > Precision::Confusion();
addToShapeConstraints(Sketcher::Perpendicular,
firstCurve,
Sketcher::PointPos::none,
firstCurve + 1,
Sketcher::PointPos::none);
addToShapeConstraints(Sketcher::Perpendicular,
firstCurve,
Sketcher::PointPos::none,
firstCurve + 2,
Sketcher::PointPos::none);
addToShapeConstraints(Sketcher::Coincident,
firstCurve,
Sketcher::PointPos::start,
firstCurve + 1,
Sketcher::PointPos::start);
addToShapeConstraints(Sketcher::Coincident,
firstCurve,
Sketcher::PointPos::end,
firstCurve + 2,
Sketcher::PointPos::start);
if (allGeos) {
addToShapeConstraints(Sketcher::Coincident,
firstCurve,
Sketcher::PointPos::mid,
firstCurve + 3,
Sketcher::PointPos::mid);
addToShapeConstraints(Sketcher::Coincident,
firstCurve + 3,
Sketcher::PointPos::start,
firstCurve + 1,
Sketcher::PointPos::end);
addToShapeConstraints(Sketcher::Coincident,
firstCurve + 3,
Sketcher::PointPos::end,
firstCurve + 2,
Sketcher::PointPos::end);
}
else {
addToShapeConstraints(Sketcher::Coincident,
firstCurve,
Sketcher::PointPos::mid,
firstCurve + 1,
Sketcher::PointPos::end);
addToShapeConstraints(Sketcher::Coincident,
firstCurve,
Sketcher::PointPos::mid,
firstCurve + 2,
Sketcher::PointPos::end);
}
}
}
}
void reverseIfNecessary()
{
if (arcAngle > 0) {
endAngle = startAngle + arcAngle;
angleReversed = false;
}
else {
endAngle = startAngle;
startAngle = startAngle + arcAngle;
angleReversed = true;
}
}
private:
Base::Vector2d centerPoint, startPoint, endPoint;
double startAngle, startAngleBackup, endAngle, arcAngle, r, radius;
bool angleReversed;
};
template<>
auto DSHArcSlotControllerBase::getState(int labelindex) const
{
switch (labelindex) {
case OnViewParameter::First:
case OnViewParameter::Second:
return SelectMode::SeekFirst;
break;
case OnViewParameter::Third:
case OnViewParameter::Fourth:
return SelectMode::SeekSecond;
break;
case OnViewParameter::Fifth:
return SelectMode::SeekThird;
break;
case OnViewParameter::Sixth:
return SelectMode::SeekFourth;
break;
default:
THROWM(Base::ValueError, "OnViewParameter index without an associated machine state")
}
}
template<>
void DSHArcSlotController::configureToolWidget()
{
if (!init) { // Code to be executed only upon initialisation
QStringList names = {QStringLiteral("Arc ends"), QStringLiteral("Flat ends")};
toolWidget->setComboboxElements(WCombobox::FirstCombo, names);
if (isConstructionMode()) {
toolWidget->setComboboxItemIcon(
WCombobox::FirstCombo,
0,
Gui::BitmapFactory().iconFromTheme("Sketcher_CreateArcSlot_Constr"));
toolWidget->setComboboxItemIcon(
WCombobox::FirstCombo,
1,
Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRectangleSlot_Constr"));
}
else {
toolWidget->setComboboxItemIcon(
WCombobox::FirstCombo,
0,
Gui::BitmapFactory().iconFromTheme("Sketcher_CreateArcSlot"));
toolWidget->setComboboxItemIcon(
WCombobox::FirstCombo,
1,
Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRectangleSlot"));
}
}
onViewParameters[OnViewParameter::First]->setLabelType(Gui::SoDatumLabel::DISTANCEX);
onViewParameters[OnViewParameter::Second]->setLabelType(Gui::SoDatumLabel::DISTANCEY);
onViewParameters[OnViewParameter::Third]->setLabelType(
Gui::SoDatumLabel::RADIUS,
Gui::EditableDatumLabel::Function::Dimensioning);
onViewParameters[OnViewParameter::Fourth]->setLabelType(
Gui::SoDatumLabel::ANGLE,
Gui::EditableDatumLabel::Function::Dimensioning);
onViewParameters[OnViewParameter::Fifth]->setLabelType(
Gui::SoDatumLabel::ANGLE,
Gui::EditableDatumLabel::Function::Dimensioning);
if (handler->constructionMethod() == DrawSketchHandlerArcSlot::ConstructionMethod::ArcSlot) {
onViewParameters[OnViewParameter::Sixth]->setLabelType(
Gui::SoDatumLabel::RADIUS,
Gui::EditableDatumLabel::Function::Dimensioning);
}
else {
onViewParameters[OnViewParameter::Sixth]->setLabelType(
Gui::SoDatumLabel::DISTANCE,
Gui::EditableDatumLabel::Function::Dimensioning);
}
}
template<>
void DSHArcSlotControllerBase::doEnforceControlParameters(Base::Vector2d& onSketchPos)
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet) {
onSketchPos.x = onViewParameters[OnViewParameter::First]->getValue();
}
if (onViewParameters[OnViewParameter::Second]->isSet) {
onSketchPos.y = onViewParameters[OnViewParameter::Second]->getValue();
}
} break;
case SelectMode::SeekSecond: {
auto dir = onSketchPos - handler->centerPoint;
if (dir.Length() < Precision::Confusion()) {
dir.x = 1.0; // if direction null, default to (1,0)
}
double radius = dir.Length();
if (onViewParameters[OnViewParameter::Third]->isSet) {
radius = onViewParameters[OnViewParameter::Third]->getValue();
if (radius < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Third].get());
return;
}
onSketchPos = handler->centerPoint + radius * dir.Normalize();
}
if (onViewParameters[OnViewParameter::Fourth]->isSet) {
double angle = onViewParameters[OnViewParameter::Fourth]->getValue() * M_PI / 180;
onSketchPos.x = handler->centerPoint.x + cos(angle) * radius;
onSketchPos.y = handler->centerPoint.y + sin(angle) * radius;
}
} break;
case SelectMode::SeekThird: {
if (onViewParameters[OnViewParameter::Fifth]->isSet) {
double arcAngle = onViewParameters[OnViewParameter::Fifth]->getValue() * M_PI / 180;
if (fmod(fabs(arcAngle), 2 * M_PI) < Precision::Confusion()) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Fifth].get());
}
else {
double length = (onSketchPos - handler->centerPoint).Length();
double angle = handler->startAngleBackup + arcAngle;
onSketchPos.x = handler->centerPoint.x + cos(angle) * length;
onSketchPos.y = handler->centerPoint.y + sin(angle) * length;
}
}
} break;
case SelectMode::SeekFourth: {
if (onViewParameters[OnViewParameter::Sixth]->isSet) {
double radius2 = onViewParameters[OnViewParameter::Sixth]->getValue();
if ((fabs(radius2) < Precision::Confusion()
&& handler->constructionMethod()
== DrawSketchHandlerArcSlot::ConstructionMethod::ArcSlot)
|| (fabs(handler->radius - radius2) < Precision::Confusion()
&& handler->constructionMethod()
== DrawSketchHandlerArcSlot::ConstructionMethod::RectangleSlot)) {
unsetOnViewParameter(onViewParameters[OnViewParameter::Sixth].get());
}
else {
onSketchPos =
handler->centerPoint + Base::Vector2d(handler->radius + radius2, 0.);
}
}
} break;
default:
break;
}
}
template<>
void DSHArcSlotController::adaptParameters(Base::Vector2d onSketchPos)
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (!onViewParameters[OnViewParameter::First]->isSet) {
setOnViewParameterValue(OnViewParameter::First, onSketchPos.x);
}
if (!onViewParameters[OnViewParameter::Second]->isSet) {
setOnViewParameterValue(OnViewParameter::Second, onSketchPos.y);
}
bool sameSign = onSketchPos.x * onSketchPos.y > 0.;
onViewParameters[OnViewParameter::First]->setLabelAutoDistanceReverse(!sameSign);
onViewParameters[OnViewParameter::Second]->setLabelAutoDistanceReverse(sameSign);
onViewParameters[OnViewParameter::First]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
onViewParameters[OnViewParameter::Second]->setPoints(Base::Vector3d(),
toVector3d(onSketchPos));
} break;
case SelectMode::SeekSecond: {
if (!onViewParameters[OnViewParameter::Third]->isSet) {
setOnViewParameterValue(OnViewParameter::Third, handler->radius);
}
double range = handler->startAngle * 180 / M_PI;
if (!onViewParameters[OnViewParameter::Fourth]->isSet) {
setOnViewParameterValue(OnViewParameter::Fourth, range, Base::Unit::Angle);
}
Base::Vector3d start = toVector3d(handler->centerPoint);
Base::Vector3d end = toVector3d(onSketchPos);
onViewParameters[OnViewParameter::Third]->setPoints(start, end);
onViewParameters[OnViewParameter::Fourth]->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Fourth]->setLabelRange(handler->startAngle);
} break;
case SelectMode::SeekThird: {
double range = handler->arcAngle * 180 / M_PI;
if (!onViewParameters[OnViewParameter::Fifth]->isSet) {
setOnViewParameterValue(OnViewParameter::Fifth, range, Base::Unit::Angle);
}
Base::Vector3d start = toVector3d(handler->centerPoint);
onViewParameters[OnViewParameter::Fifth]->setPoints(start, Base::Vector3d());
onViewParameters[OnViewParameter::Fifth]->setLabelStartAngle(handler->startAngleBackup);
onViewParameters[OnViewParameter::Fifth]->setLabelRange(handler->arcAngle);
} break;
case SelectMode::SeekFourth: {
double dist = handler->r;
if (handler->constructionMethod()
== DrawSketchHandlerArcSlot::ConstructionMethod::RectangleSlot) {
dist = (handler->r - handler->radius);
}
if (!onViewParameters[OnViewParameter::Sixth]->isSet) {
setOnViewParameterValue(OnViewParameter::Sixth, dist);
}
Base::Vector3d start = toVector3d(handler->endPoint);
Base::Vector3d end =
start + (start - toVector3d(handler->centerPoint)).Normalize() * dist;
onViewParameters[OnViewParameter::Sixth]->setPoints(start, end);
} break;
default:
break;
}
}
template<>
void DSHArcSlotController::doChangeDrawSketchHandlerMode()
{
switch (handler->state()) {
case SelectMode::SeekFirst: {
if (onViewParameters[OnViewParameter::First]->isSet
&& onViewParameters[OnViewParameter::Second]->isSet) {
handler->setState(SelectMode::SeekSecond);
}
} break;
case SelectMode::SeekSecond: {
if (onViewParameters[OnViewParameter::Third]->isSet
&& onViewParameters[OnViewParameter::Fourth]->isSet) {
handler->setState(SelectMode::SeekThird);
}
} break;
case SelectMode::SeekThird: {
if (onViewParameters[OnViewParameter::Fifth]->isSet) {
handler->setState(SelectMode::SeekFourth);
}
} break;
case SelectMode::SeekFourth: {
if (onViewParameters[OnViewParameter::Sixth]->isSet) {
handler->setState(SelectMode::End);
}
} break;
default:
break;
}
}
template<>
void DSHArcSlotController::addConstraints()
{
App::DocumentObject* obj = handler->sketchgui->getObject();
int firstCurve = handler->getHighestCurveIndex() - 3;
using namespace Sketcher;
auto x0 = onViewParameters[OnViewParameter::First]->getValue();
auto y0 = onViewParameters[OnViewParameter::Second]->getValue();
auto radius = onViewParameters[OnViewParameter::Third]->getValue();
auto slotRadius = onViewParameters[OnViewParameter::Sixth]->getValue();
auto x0set = onViewParameters[OnViewParameter::First]->isSet;
auto y0set = onViewParameters[OnViewParameter::Second]->isSet;
auto radiusSet = onViewParameters[OnViewParameter::Third]->isSet;
auto arcAngleSet = onViewParameters[OnViewParameter::Fifth]->isSet;
auto slotRadiusSet = onViewParameters[OnViewParameter::Sixth]->isSet;
auto constraintx0 = [&]() {
ConstraintToAttachment(GeoElementId(firstCurve, PointPos::mid),
GeoElementId::VAxis,
x0,
obj);
};
auto constrainty0 = [&]() {
ConstraintToAttachment(GeoElementId(firstCurve, PointPos::mid),
GeoElementId::HAxis,
y0,
obj);
};
auto constraintRadius = [&]() {
if (handler->constructionMethod()
== DrawSketchHandlerArcSlot::ConstructionMethod::ArcSlot) {
Gui::cmdAppObjectArgs(obj,
"addConstraint(Sketcher.Constraint('Distance',%d,%d,%d,%d,%f)) ",
firstCurve,
3,
firstCurve + 2,
3,
fabs(radius));
}
else {
Gui::cmdAppObjectArgs(obj,
"addConstraint(Sketcher.Constraint('Radius',%d,%f)) ",
firstCurve,
fabs(radius));
}
};
auto constraintArcAngle = [&]() {
Gui::cmdAppObjectArgs(obj,
"addConstraint(Sketcher.Constraint('Angle',%d,%f)) ",
firstCurve,
fabs(handler->arcAngle));
};
auto constraintSlotRadius = [&]() {
if (handler->constructionMethod()
== DrawSketchHandlerArcSlot::ConstructionMethod::ArcSlot) {
Gui::cmdAppObjectArgs(obj,
"addConstraint(Sketcher.Constraint('Radius',%d,%f)) ",
firstCurve + 2,
fabs(slotRadius));
}
else {
Gui::cmdAppObjectArgs(obj,
"addConstraint(Sketcher.Constraint('Distance',%d,%f)) ",
firstCurve + 2,
fabs(slotRadius));
}
};
if (handler->AutoConstraints.empty()) { // No valid diagnosis. Every constraint can be added.
if (x0set && y0set && x0 == 0. && y0 == 0.) {
ConstraintToAttachment(GeoElementId(firstCurve, PointPos::mid),
GeoElementId::RtPnt,
0.,
obj);
}
else {
if (x0set) {
constraintx0();
}
if (y0set) {
constrainty0();
}
}
if (radiusSet) {
constraintRadius();
}
if (arcAngleSet) {
constraintArcAngle();
}
if (slotRadiusSet) {
constraintSlotRadius();
}
}
else { // Valid diagnosis. Must check which constraints may be added.
auto startpointinfo = handler->getPointInfo(GeoElementId(firstCurve, PointPos::mid));
if (x0set && startpointinfo.isXDoF()) {
constraintx0();
handler->diagnoseWithAutoConstraints(); // ensure we have recalculated parameters after
// each constraint addition
// get updated point position
startpointinfo = handler->getPointInfo(GeoElementId(firstCurve, PointPos::mid));
}
if (y0set && startpointinfo.isYDoF()) {
constrainty0();
handler->diagnoseWithAutoConstraints(); // ensure we have recalculated parameters after
// each constraint addition
// get updated point position
startpointinfo = handler->getPointInfo(GeoElementId(firstCurve, PointPos::mid));
}
startpointinfo = handler->getPointInfo(GeoElementId(firstCurve, PointPos::start));
auto endpointinfo = handler->getPointInfo(GeoElementId(firstCurve, PointPos::end));
auto midpointinfo = handler->getPointInfo(GeoElementId(firstCurve, PointPos::mid));
int DoFs = startpointinfo.getDoFs();
DoFs += endpointinfo.getDoFs();
DoFs += midpointinfo.getDoFs();
if (radiusSet && DoFs > 0) {
constraintRadius();
DoFs--;
}
if (arcAngleSet && DoFs > 0) {
constraintArcAngle();
}
startpointinfo = handler->getPointInfo(GeoElementId(firstCurve + 2, PointPos::start));
endpointinfo = handler->getPointInfo(GeoElementId(firstCurve + 2, PointPos::end));
DoFs = startpointinfo.getDoFs();
DoFs += endpointinfo.getDoFs();
if (handler->constructionMethod()
== DrawSketchHandlerArcSlot::ConstructionMethod::ArcSlot) {
midpointinfo = handler->getPointInfo(GeoElementId(firstCurve + 2, PointPos::mid));
DoFs += midpointinfo.getDoFs();
}
if (slotRadiusSet && DoFs > 0) {
constraintSlotRadius();
}
}
}
} // namespace SketcherGui
#endif // SKETCHERGUI_DrawSketchHandlerArcSlot_H

View File

@@ -128,6 +128,8 @@
<file>icons/geometry/Sketcher_Create3PointCircle_Constr.svg</file>
<file>icons/geometry/Sketcher_CreateArc.svg</file>
<file>icons/geometry/Sketcher_CreateArc_Constr.svg</file>
<file>icons/geometry/Sketcher_CreateArcSlot.svg</file>
<file>icons/geometry/Sketcher_CreateArcSlot_Constr.svg</file>
<file>icons/geometry/Sketcher_CreateBSpline.svg</file>
<file>icons/geometry/Sketcher_CreateBSpline_Constr.svg</file>
<file>icons/geometry/Sketcher_CreateBSplineByInterpolation.svg</file>
@@ -179,6 +181,8 @@
<file>icons/geometry/Sketcher_CreateRectangle3Points_Constr.svg</file>
<file>icons/geometry/Sketcher_CreateRectangle3Points_Center.svg</file>
<file>icons/geometry/Sketcher_CreateRectangle3Points_Center_Constr.svg</file>
<file>icons/geometry/Sketcher_CreateRectangleSlot.svg</file>
<file>icons/geometry/Sketcher_CreateRectangleSlot_Constr.svg</file>
<file>icons/geometry/Sketcher_CreateRegularPolygon.svg</file>
<file>icons/geometry/Sketcher_CreateRegularPolygon_Constr.svg</file>
<file>icons/geometry/Sketcher_CreateSlot.svg</file>
@@ -213,6 +217,7 @@
<file>icons/pointers/Sketcher_Pointer_Create_ArcOfEllipse.svg</file>
<file>icons/pointers/Sketcher_Pointer_Create_ArcOfHyperbola.svg</file>
<file>icons/pointers/Sketcher_Pointer_Create_ArcOfParabola.svg</file>
<file>icons/pointers/Sketcher_Pointer_Create_ArcSlot.svg</file>
<file>icons/pointers/Sketcher_Pointer_Create_Box.svg</file>
<file>icons/pointers/Sketcher_Pointer_Create_Box_Center.svg</file>
<file>icons/pointers/Sketcher_Pointer_Create_BSpline.svg</file>
@@ -234,6 +239,7 @@
<file>icons/pointers/Sketcher_Pointer_Oblong_Frame.svg</file>
<file>icons/pointers/Sketcher_Pointer_Oblong_Frame_Center.svg</file>
<file>icons/pointers/Sketcher_Pointer_Regular_Polygon.svg</file>
<file>icons/pointers/Sketcher_Pointer_Create_RectangleSlot.svg</file>
<file>icons/pointers/Sketcher_Pointer_Slot.svg</file>
<file>icons/pointers/Sketcher_Pointer_Splitting.svg</file>
<file>icons/pointers/Sketcher_Pointer_Trimming.svg</file>

View File

@@ -0,0 +1,344 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="64"
height="64"
id="svg4564"
version="1.1"
sodipodi:docname="Sketcher_CreateArcSlot.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="namedview44"
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"
showguides="false"
inkscape:zoom="4"
inkscape:cx="43.625"
inkscape:cy="38.125"
inkscape:window-width="3840"
inkscape:window-height="1571"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="svg4564" />
<defs
id="defs4566">
<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
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>
<radialGradient
xlink:href="#linearGradient3144-3"
id="radialGradient4572"
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="linearGradient3144-3">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop3146-7" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="1"
id="stop3148-0" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient3144-0"
id="radialGradient4574"
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="linearGradient3144-0">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop3146-2" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="1"
id="stop3148-9" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3830"
id="linearGradient3836"
x1="36"
y1="1037.3622"
x2="32"
y2="1005.3622"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(102.20943,-950.01075)" />
<linearGradient
xlink:href="#linearGradient3838"
id="linearGradient3844"
x1="36"
y1="1039.3622"
x2="32"
y2="1003.3622"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(76.046477,-943.5584)" />
<radialGradient
xlink:href="#linearGradient3144-3"
id="radialGradient3846"
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" />
<radialGradient
xlink:href="#linearGradient3144-0"
id="radialGradient3848"
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
xlink:href="#linearGradient3836-0-6-4"
id="linearGradient3801-1-3-7"
gradientUnits="userSpaceOnUse"
x1="-18"
y1="18"
x2="-22"
y2="5" />
<linearGradient
id="linearGradient3836-0-6-4">
<stop
style="stop-color:#a40000;stop-opacity:1"
offset="0"
id="stop3838-2-7-0" />
<stop
style="stop-color:#ef2929;stop-opacity:1"
offset="1"
id="stop3840-5-5-9" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3836-0-6"
id="linearGradient3801-1-3"
gradientUnits="userSpaceOnUse"
x1="-18"
y1="18"
x2="-22"
y2="5" />
<linearGradient
id="linearGradient3836-0-6">
<stop
style="stop-color:#a40000;stop-opacity:1"
offset="0"
id="stop3838-2-7" />
<stop
style="stop-color:#ef2929;stop-opacity:1"
offset="1"
id="stop3840-5-5" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3836-0-6-4"
id="linearGradient3801-1-3-9"
gradientUnits="userSpaceOnUse"
x1="-18"
y1="18"
x2="-22"
y2="5" />
</defs>
<metadata
id="metadata4569">
<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>[jriegel]</dc:title>
</cc:Agent>
</dc:creator>
<dc:date>2014-04-15</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>FreeCAD/src/Mod/Sketcher/Gui/Resources/icons/Sketcher_CreateSlot.svg</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>[agryson] Alexander Gryson</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="matrix(0.77869192,0,0,0.77869178,9.3645627,4.9596534)"
id="g3827-1-3-4"
style="stroke-width:1.28421">
<g
transform="translate(31.322131,40.570289)"
id="g3797-9-5-8"
style="stroke-width:1.28421">
<path
style="fill:#ef2929;stroke:#280000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6-8"
d="M -26.156204,5.582626 A 8.993818,8.9934077 0.02042283 1 1 -12.493793,17.282241 8.993818,8.9934077 0.02042283 1 1 -26.156204,5.582626 Z" />
<path
style="fill:url(#linearGradient3801-1-3-7);fill-opacity:1;stroke:#ef2929;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2-2"
d="M -24.633588,6.893588 A 6.9999997,7.0000001 0 1 1 -14,16 6.9999997,7.0000001 0 0 1 -24.633588,6.893588 Z" />
</g>
</g>
<g
transform="matrix(0.77869192,0,0,0.77869178,35.839438,-21.733628)"
id="g3827-1-3"
style="stroke-width:1.28421">
<g
transform="translate(31.322131,40.570289)"
id="g3797-9-5"
style="stroke-width:1.28421">
<path
style="fill:#ef2929;stroke:#280000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6"
d="M -26.156204,5.582626 A 8.993818,8.9934077 0.02042283 1 1 -12.493793,17.282241 8.993818,8.9934077 0.02042283 1 1 -26.156204,5.582626 Z" />
<path
style="fill:url(#linearGradient3801-1-3);fill-opacity:1;stroke:#ef2929;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2"
d="M -24.633588,6.893588 A 6.9999997,7.0000001 0 1 1 -14,16 6.9999997,7.0000001 0 0 1 -24.633588,6.893588 Z" />
</g>
</g>
<g
id="g2949"
transform="translate(-0.5303301)">
<path
id="path1424"
style="fill:none;stroke:#2e3436;stroke-width:8"
transform="scale(-1)"
d="M -5.6261024,-45.711533 A 40.574177,40.574177 0 0 1 -46.200279,-5.1373558" />
<path
id="path1678"
style="fill:none;stroke:#2e3436;stroke-width:8"
d="m 32.80709,45.653553 a 13.590611,13.590611 0 0 1 -6.795306,11.769815 13.590611,13.590611 0 0 1 -13.590612,0 13.590611,13.590611 0 0 1 -6.7953051,-11.769815" />
<path
id="path1678-9"
style="fill:none;stroke:#2e3436;stroke-width:8"
transform="rotate(-90)"
d="m -5.135951,46.153893 a 13.590611,13.590611 0 0 1 -6.795306,11.769814 13.590611,13.590611 0 0 1 -13.590612,0 13.590611,13.590611 0 0 1 -6.795305,-11.769814" />
<path
id="path1424-5"
style="fill:none;stroke:#2e3436;stroke-width:8.01169"
transform="scale(-1)"
d="m -32.816535,-45.711121 a 13.400769,13.396863 0 0 1 -13.400769,13.396863" />
</g>
<g
id="g3019"
transform="translate(67.705476,-3.8006973)">
<path
id="path1424-9"
style="fill:none;stroke:#d3d7cf;stroke-width:4"
transform="scale(-1)"
d="M 62.609701,-49.51223 A 40.574177,40.574177 0 0 1 22.035524,-8.9380531" />
<path
id="path1678-4"
style="fill:none;stroke:#d3d7cf;stroke-width:4"
d="m -35.428714,49.45425 a 13.590611,13.590611 0 0 1 -6.795306,11.769815 13.590611,13.590611 0 0 1 -13.590611,0 13.590611,13.590611 0 0 1 -6.795306,-11.769815" />
<path
id="path1678-9-3"
style="fill:none;stroke:#d3d7cf;stroke-width:4"
transform="rotate(-90)"
d="m -8.9366484,-22.081911 a 13.590611,13.590611 0 0 1 -6.7953056,11.769815 13.590611,13.590611 0 0 1 -13.590612,-10e-7 13.590611,13.590611 0 0 1 -6.795305,-11.769814" />
<path
id="path1424-5-2"
style="fill:none;stroke:#d3d7cf;stroke-width:4"
transform="scale(-1)"
d="m 35.419269,-49.511818 a 13.400769,13.396863 0 0 1 -13.40077,13.396863" />
</g>
<path
id="path1424-9-1"
style="fill:none;stroke:#ffffff;stroke-width:2.05913"
transform="scale(-1)"
d="M -4.0957909,-45.837807 A 41.866669,41.681 0 0 1 -45.96246,-4.1568069" />
<path
id="path1678-4-8"
style="fill:none;stroke:#ffffff;stroke-width:1.98694"
d="m 31.332714,45.783081 a 13.635511,13.36954 0 0 1 -6.817756,11.578362 13.635511,13.36954 0 0 1 -13.635511,-1e-6 13.635511,13.36954 0 0 1 -6.8177557,-11.578361" />
<path
id="path1678-9-3-2"
style="fill:none;stroke:#ffffff;stroke-width:2"
transform="rotate(-90)"
d="m -4.139431,45.942238 a 13.59516,13.479994 0 0 1 -6.79758,11.674017 13.59516,13.479994 0 0 1 -13.59516,0 13.59516,13.479994 0 0 1 -6.797579,-11.674017" />
<path
id="path1424-5-2-1"
style="fill:none;stroke:#ffffff;stroke-width:2.01102"
transform="scale(-1)"
d="m -31.301743,-45.814209 a 14.651169,14.478485 0 0 1 -14.651168,14.478485" />
<g
transform="matrix(0.68405397,0,0,0.68405385,38.815917,11.184757)"
id="g3827-1-3-1"
style="stroke-width:1.28421">
<g
transform="translate(31.322131,40.570289)"
id="g3797-9-5-9"
style="stroke-width:1.28421">
<path
style="fill:#ef2929;stroke:#280000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6-9"
d="M -26.156204,5.582626 A 8.993818,8.9934077 0.02042283 1 1 -12.493793,17.282241 8.993818,8.9934077 0.02042283 1 1 -26.156204,5.582626 Z" />
<path
style="fill:url(#linearGradient3801-1-3-9);fill-opacity:1;stroke:#ef2929;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2-20"
d="M -24.633588,6.893588 A 6.9999997,7.0000001 0 1 1 -14,16 6.9999997,7.0000001 0 0 1 -24.633588,6.893588 Z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,350 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="64"
height="64"
id="svg4564"
version="1.1"
sodipodi:docname="Sketcher_CreateArcSlot_Constr.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="namedview44"
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"
showguides="false"
inkscape:zoom="4"
inkscape:cx="10.875"
inkscape:cy="30.375"
inkscape:window-width="3840"
inkscape:window-height="1571"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="svg4564" />
<defs
id="defs4566">
<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
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>
<radialGradient
xlink:href="#linearGradient3144-3"
id="radialGradient4572"
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="linearGradient3144-3">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop3146-7" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="1"
id="stop3148-0" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient3144-0"
id="radialGradient4574"
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="linearGradient3144-0">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop3146-2" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="1"
id="stop3148-9" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3830"
id="linearGradient3836"
x1="36"
y1="1037.3622"
x2="32"
y2="1005.3622"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(102.20943,-950.01075)" />
<linearGradient
xlink:href="#linearGradient3838"
id="linearGradient3844"
x1="36"
y1="1039.3622"
x2="32"
y2="1003.3622"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(76.046477,-943.5584)" />
<radialGradient
xlink:href="#linearGradient3144-3"
id="radialGradient3846"
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" />
<radialGradient
xlink:href="#linearGradient3144-0"
id="radialGradient3848"
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
xlink:href="#linearGradient3836-0-6-4"
id="linearGradient3801-1-3-7"
gradientUnits="userSpaceOnUse"
x1="-18"
y1="18"
x2="-22"
y2="5" />
<linearGradient
id="linearGradient3836-0-6-4">
<stop
style="stop-color:#a40000;stop-opacity:1"
offset="0"
id="stop3838-2-7-0" />
<stop
style="stop-color:#ef2929;stop-opacity:1"
offset="1"
id="stop3840-5-5-9" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3836-0-6"
id="linearGradient3801-1-3"
gradientUnits="userSpaceOnUse"
x1="-18"
y1="18"
x2="-22"
y2="5" />
<linearGradient
id="linearGradient3836-0-6">
<stop
style="stop-color:#a40000;stop-opacity:1"
offset="0"
id="stop3838-2-7" />
<stop
style="stop-color:#ef2929;stop-opacity:1"
offset="1"
id="stop3840-5-5" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3836-0-6-4"
id="linearGradient3801-1-3-9"
gradientUnits="userSpaceOnUse"
x1="-18"
y1="18"
x2="-22"
y2="5" />
</defs>
<metadata
id="metadata4569">
<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>[jriegel]</dc:title>
</cc:Agent>
</dc:creator>
<dc:date>2014-04-15</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>FreeCAD/src/Mod/Sketcher/Gui/Resources/icons/Sketcher_CreateSlot.svg</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>[agryson] Alexander Gryson</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="matrix(0.77869192,0,0,0.77869178,9.3645627,4.9596534)"
id="g3827-1-3-4"
style="stroke-width:1.28421">
<g
transform="translate(31.322131,40.570289)"
id="g3797-9-5-8"
style="stroke-width:1.28421">
<path
style="fill:#ef2929;stroke:#280000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6-8"
d="M -26.156204,5.582626 A 8.993818,8.9934077 0.02042283 1 1 -12.493793,17.282241 8.993818,8.9934077 0.02042283 1 1 -26.156204,5.582626 Z" />
<path
style="fill:url(#linearGradient3801-1-3-7);fill-opacity:1;stroke:#ef2929;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2-2"
d="M -24.633588,6.893588 A 6.9999997,7.0000001 0 1 1 -14,16 6.9999997,7.0000001 0 0 1 -24.633588,6.893588 Z" />
</g>
</g>
<g
transform="matrix(0.77869192,0,0,0.77869178,35.839438,-21.733628)"
id="g3827-1-3"
style="stroke-width:1.28421">
<g
transform="translate(31.322131,40.570289)"
id="g3797-9-5"
style="stroke-width:1.28421">
<path
style="fill:#ef2929;stroke:#280000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6"
d="M -26.156204,5.582626 A 8.993818,8.9934077 0.02042283 1 1 -12.493793,17.282241 8.993818,8.9934077 0.02042283 1 1 -26.156204,5.582626 Z" />
<path
style="fill:url(#linearGradient3801-1-3);fill-opacity:1;stroke:#ef2929;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2"
d="M -24.633588,6.893588 A 6.9999997,7.0000001 0 1 1 -14,16 6.9999997,7.0000001 0 0 1 -24.633588,6.893588 Z" />
</g>
</g>
<g
id="g2949"
transform="translate(-0.5303301)"
style="stroke:#0b1521;stroke-opacity:1">
<path
id="path1424"
style="fill:none;stroke-width:8"
transform="scale(-1)"
d="M -5.6261024,-45.711533 A 40.574177,40.574177 0 0 1 -46.200279,-5.1373558" />
<path
id="path1678"
style="fill:none;stroke-width:8"
d="m 32.80709,45.653553 a 13.590611,13.590611 0 0 1 -6.795306,11.769815 13.590611,13.590611 0 0 1 -13.590612,0 13.590611,13.590611 0 0 1 -6.7953051,-11.769815" />
<path
id="path1678-9"
style="fill:none;stroke-width:8"
transform="rotate(-90)"
d="m -5.135951,46.153893 a 13.590611,13.590611 0 0 1 -6.795306,11.769814 13.590611,13.590611 0 0 1 -13.590612,0 13.590611,13.590611 0 0 1 -6.795305,-11.769814" />
<path
id="path1424-5"
style="fill:none;stroke-width:8.01169"
transform="scale(-1)"
d="m -32.816535,-45.711121 a 13.400769,13.396863 0 0 1 -13.400769,13.396863" />
</g>
<g
id="g3019"
transform="translate(67.705476,-3.8006973)"
style="stroke:#204a87;stroke-opacity:1">
<path
id="path1424-9"
style="fill:none;stroke-width:4"
transform="scale(-1)"
d="M 62.609701,-49.51223 A 40.574177,40.574177 0 0 1 22.035524,-8.9380531" />
<path
id="path1678-4"
style="fill:none;stroke-width:4"
d="m -35.428714,49.45425 a 13.590611,13.590611 0 0 1 -6.795306,11.769815 13.590611,13.590611 0 0 1 -13.590611,0 13.590611,13.590611 0 0 1 -6.795306,-11.769815" />
<path
id="path1678-9-3"
style="fill:none;stroke-width:4"
transform="rotate(-90)"
d="m -8.9366484,-22.081911 a 13.590611,13.590611 0 0 1 -6.7953056,11.769815 13.590611,13.590611 0 0 1 -13.590612,-10e-7 13.590611,13.590611 0 0 1 -6.795305,-11.769814" />
<path
id="path1424-5-2"
style="fill:none;stroke-width:4"
transform="scale(-1)"
d="m 35.419269,-49.511818 a 13.400769,13.396863 0 0 1 -13.40077,13.396863" />
</g>
<g
id="g878"
style="stroke:#729fcf;stroke-opacity:1">
<path
id="path1424-9-1"
style="fill:none;stroke-width:2.05913"
transform="scale(-1)"
d="M -4.0957909,-45.837807 A 41.866669,41.681 0 0 1 -45.96246,-4.1568069" />
<path
id="path1678-4-8"
style="fill:none;stroke-width:1.98694"
d="m 31.332714,45.783081 a 13.635511,13.36954 0 0 1 -6.817756,11.578362 13.635511,13.36954 0 0 1 -13.635511,-1e-6 13.635511,13.36954 0 0 1 -6.8177557,-11.578361" />
<path
id="path1678-9-3-2"
style="fill:none;stroke-width:2"
transform="rotate(-90)"
d="m -4.139431,45.942238 a 13.59516,13.479994 0 0 1 -6.79758,11.674017 13.59516,13.479994 0 0 1 -13.59516,0 13.59516,13.479994 0 0 1 -6.797579,-11.674017" />
<path
id="path1424-5-2-1"
style="fill:none;stroke-width:2.01102"
transform="scale(-1)"
d="m -31.301743,-45.814209 a 14.651169,14.478485 0 0 1 -14.651168,14.478485" />
</g>
<g
transform="matrix(0.68405397,0,0,0.68405385,38.815917,11.184757)"
id="g3827-1-3-1"
style="stroke-width:1.28421">
<g
transform="translate(31.322131,40.570289)"
id="g3797-9-5-9"
style="stroke-width:1.28421">
<path
style="fill:#ef2929;stroke:#280000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6-9"
d="M -26.156204,5.582626 A 8.993818,8.9934077 0.02042283 1 1 -12.493793,17.282241 8.993818,8.9934077 0.02042283 1 1 -26.156204,5.582626 Z" />
<path
style="fill:url(#linearGradient3801-1-3-9);fill-opacity:1;stroke:#ef2929;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2-20"
d="M -24.633588,6.893588 A 6.9999997,7.0000001 0 1 1 -14,16 6.9999997,7.0000001 0 0 1 -24.633588,6.893588 Z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,399 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="64"
height="64"
id="svg4564"
version="1.1"
sodipodi:docname="Sketcher_CreateRectangleSlot.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="namedview44"
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"
showguides="false"
inkscape:zoom="11.313709"
inkscape:cx="59.883103"
inkscape:cy="24.704542"
inkscape:window-width="3840"
inkscape:window-height="1571"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="svg4564" />
<defs
id="defs4566">
<inkscape:path-effect
effect="bspline"
id="path-effect2046"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect2042"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect2038"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1807"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1803"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1602"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<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
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>
<radialGradient
xlink:href="#linearGradient3144-3"
id="radialGradient4572"
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="linearGradient3144-3">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop3146-7" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="1"
id="stop3148-0" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient3144-0"
id="radialGradient4574"
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="linearGradient3144-0">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop3146-2" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="1"
id="stop3148-9" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3830"
id="linearGradient3836"
x1="36"
y1="1037.3622"
x2="32"
y2="1005.3622"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(102.20943,-950.01075)" />
<linearGradient
xlink:href="#linearGradient3838"
id="linearGradient3844"
x1="36"
y1="1039.3622"
x2="32"
y2="1003.3622"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(76.046477,-943.5584)" />
<radialGradient
xlink:href="#linearGradient3144-3"
id="radialGradient3846"
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" />
<radialGradient
xlink:href="#linearGradient3144-0"
id="radialGradient3848"
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
xlink:href="#linearGradient3836-0-6-4"
id="linearGradient3801-1-3-7"
gradientUnits="userSpaceOnUse"
x1="-18"
y1="18"
x2="-22"
y2="5" />
<linearGradient
id="linearGradient3836-0-6-4">
<stop
style="stop-color:#a40000;stop-opacity:1"
offset="0"
id="stop3838-2-7-0" />
<stop
style="stop-color:#ef2929;stop-opacity:1"
offset="1"
id="stop3840-5-5-9" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3836-0-6"
id="linearGradient3801-1-3"
gradientUnits="userSpaceOnUse"
x1="-18"
y1="18"
x2="-22"
y2="5" />
<linearGradient
id="linearGradient3836-0-6">
<stop
style="stop-color:#a40000;stop-opacity:1"
offset="0"
id="stop3838-2-7" />
<stop
style="stop-color:#ef2929;stop-opacity:1"
offset="1"
id="stop3840-5-5" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3836-0-6-4"
id="linearGradient3801-1-3-9"
gradientUnits="userSpaceOnUse"
x1="-18"
y1="18"
x2="-22"
y2="5" />
</defs>
<metadata
id="metadata4569">
<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>[jriegel]</dc:title>
</cc:Agent>
</dc:creator>
<dc:date>2014-04-15</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>FreeCAD/src/Mod/Sketcher/Gui/Resources/icons/Sketcher_CreateSlot.svg</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>[agryson] Alexander Gryson</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
</rdf:RDF>
</metadata>
<path
style="fill:none;stroke:#2e3436;stroke-width:8.00945;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 35.456118,53.769921 c -10.086444,0 -20.171749,0 -30.25591,0"
id="path1600-3" />
<path
style="fill:none;stroke:#2e3436;stroke-width:8.07104;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 51.741679,7.0646148 c 0,10.2421492 0,20.4831482 0,30.7229862"
id="path1600" />
<path
id="path1424"
style="fill:none;stroke:#2e3436;stroke-width:8;stroke-opacity:1"
transform="scale(-1)"
d="M -9.1945572,-51.633518 A 40.574177,40.574177 0 0 1 -49.768734,-11.059341" />
<path
id="path1424-9"
style="fill:none;stroke:#d3d7cf;stroke-width:4;stroke-opacity:1"
transform="scale(-1)"
d="m -9.194561,-51.633518 a 40.574177,40.574177 0 0 1 -40.574177,40.574177" />
<path
id="path1424-9-1"
style="fill:none;stroke:#ffffff;stroke-width:2.05913;fill-opacity:1;stroke-opacity:1"
transform="scale(-1)"
d="M -8.1945763,-51.759792 A 41.866669,41.681 0 0 1 -50.061245,-10.078793" />
<path
id="path1424-5"
style="fill:none;stroke:#2e3436;stroke-width:8;stroke-opacity:1"
transform="scale(-1)"
d="m -31.40913,-52.125439 a 18.340073,18.334726 0 0 1 -18.340073,18.334727" />
<path
id="path1424-5-2"
style="fill:none;stroke:#d3d7cf;stroke-width:4;stroke-opacity:1"
transform="scale(-1)"
d="m -31.409134,-52.125439 a 18.340073,18.334726 0 0 1 -18.340073,18.334727" />
<path
id="path1424-5-2-1"
style="fill:none;stroke:#ffffff;stroke-width:2;fill-opacity:1;stroke-opacity:1"
transform="scale(-1)"
d="m -30.06181,-52.266525 a 20.05135,19.815018 0 0 1 -20.051349,19.815017" />
<path
style="fill:none;stroke:#d3d7cf;stroke-width:4.06864;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 51.740076,9.0505865 c 0,8.9137695 0,17.8265285 0,26.7382755"
id="path1801" />
<path
style="fill:none;stroke:#ffffff;stroke-width:1.91937;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
d="m 50.652877,9.0441144 c 0,8.1363316 0,16.2717496 0,24.4062446"
id="path1805" />
<path
style="fill:none;stroke:#d3d7cf;stroke-width:4.03081;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 33.406426,53.768318 c -8.748793,0 -17.496589,0 -26.2433901,0"
id="path1801-8" />
<path
style="fill:none;stroke:#ffffff;stroke-width:1.89976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
d="m 31.072566,52.592731 c -7.970969,0 -15.941038,0 -23.9102001,0"
id="path1805-0" />
<g
transform="matrix(0.77869192,0,0,0.77869178,22.113855,13.126469)"
id="g3827-1-3-4"
style="stroke-width:1.28421">
<g
transform="translate(31.322131,40.570289)"
id="g3797-9-5-8"
style="stroke-width:1.28421">
<path
style="fill:#ef2929;stroke:#280000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6-8"
d="M -26.156204,5.582626 A 8.993818,8.9934077 0.02042283 1 1 -12.493793,17.282241 8.993818,8.9934077 0.02042283 1 1 -26.156204,5.582626 Z" />
<path
style="fill:url(#linearGradient3801-1-3-7);fill-opacity:1;stroke:#ef2929;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2-2"
d="M -24.633588,6.893588 A 6.9999997,7.0000001 0 1 1 -14,16 6.9999997,7.0000001 0 0 1 -24.633588,6.893588 Z" />
</g>
</g>
<g
transform="matrix(0.77869192,0,0,0.77869178,42.324719,-28.097589)"
id="g3827-1-3"
style="stroke-width:1.28421">
<g
transform="translate(31.322131,40.570289)"
id="g3797-9-5"
style="stroke-width:1.28421">
<path
style="fill:#ef2929;stroke:#280000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6"
d="M -26.156204,5.582626 A 8.993818,8.9934077 0.02042283 1 1 -12.493793,17.282241 8.993818,8.9934077 0.02042283 1 1 -26.156204,5.582626 Z" />
<path
style="fill:url(#linearGradient3801-1-3);fill-opacity:1;stroke:#ef2929;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2"
d="M -24.633588,6.893588 A 6.9999997,7.0000001 0 1 1 -14,16 6.9999997,7.0000001 0 0 1 -24.633588,6.893588 Z" />
</g>
</g>
<g
transform="matrix(0.68405397,0,0,0.68405385,42.737933,17.592911)"
id="g3827-1-3-1"
style="stroke-width:1.28421">
<g
transform="translate(31.322131,40.570289)"
id="g3797-9-5-9"
style="stroke-width:1.28421">
<path
style="fill:#ef2929;stroke:#280000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6-9"
d="M -26.156204,5.582626 A 8.993818,8.9934077 0.02042283 1 1 -12.493793,17.282241 8.993818,8.9934077 0.02042283 1 1 -26.156204,5.582626 Z" />
<path
style="fill:url(#linearGradient3801-1-3-9);fill-opacity:1;stroke:#ef2929;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2-20"
d="M -24.633588,6.893588 A 6.9999997,7.0000001 0 1 1 -14,16 6.9999997,7.0000001 0 0 1 -24.633588,6.893588 Z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,399 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="64"
height="64"
id="svg4564"
version="1.1"
sodipodi:docname="Sketcher_CreateRectangleSlot_Constr.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="namedview44"
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"
showguides="false"
inkscape:zoom="11.313709"
inkscape:cx="59.794715"
inkscape:cy="24.704542"
inkscape:window-width="3840"
inkscape:window-height="1571"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="svg4564" />
<defs
id="defs4566">
<inkscape:path-effect
effect="bspline"
id="path-effect2046"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect2042"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect2038"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1807"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1803"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1602"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<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
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>
<radialGradient
xlink:href="#linearGradient3144-3"
id="radialGradient4572"
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="linearGradient3144-3">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop3146-7" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="1"
id="stop3148-0" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient3144-0"
id="radialGradient4574"
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="linearGradient3144-0">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop3146-2" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="1"
id="stop3148-9" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3830"
id="linearGradient3836"
x1="36"
y1="1037.3622"
x2="32"
y2="1005.3622"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(102.20943,-950.01075)" />
<linearGradient
xlink:href="#linearGradient3838"
id="linearGradient3844"
x1="36"
y1="1039.3622"
x2="32"
y2="1003.3622"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(76.046477,-943.5584)" />
<radialGradient
xlink:href="#linearGradient3144-3"
id="radialGradient3846"
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" />
<radialGradient
xlink:href="#linearGradient3144-0"
id="radialGradient3848"
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
xlink:href="#linearGradient3836-0-6-4"
id="linearGradient3801-1-3-7"
gradientUnits="userSpaceOnUse"
x1="-18"
y1="18"
x2="-22"
y2="5" />
<linearGradient
id="linearGradient3836-0-6-4">
<stop
style="stop-color:#a40000;stop-opacity:1"
offset="0"
id="stop3838-2-7-0" />
<stop
style="stop-color:#ef2929;stop-opacity:1"
offset="1"
id="stop3840-5-5-9" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3836-0-6"
id="linearGradient3801-1-3"
gradientUnits="userSpaceOnUse"
x1="-18"
y1="18"
x2="-22"
y2="5" />
<linearGradient
id="linearGradient3836-0-6">
<stop
style="stop-color:#a40000;stop-opacity:1"
offset="0"
id="stop3838-2-7" />
<stop
style="stop-color:#ef2929;stop-opacity:1"
offset="1"
id="stop3840-5-5" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient3836-0-6-4"
id="linearGradient3801-1-3-9"
gradientUnits="userSpaceOnUse"
x1="-18"
y1="18"
x2="-22"
y2="5" />
</defs>
<metadata
id="metadata4569">
<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>[jriegel]</dc:title>
</cc:Agent>
</dc:creator>
<dc:date>2014-04-15</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>FreeCAD/src/Mod/Sketcher/Gui/Resources/icons/Sketcher_CreateSlot.svg</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>[agryson] Alexander Gryson</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
</rdf:RDF>
</metadata>
<path
style="fill:none;stroke:#0b1521;stroke-width:8.00945;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 35.456118,53.769921 c -10.086444,0 -20.171749,0 -30.25591,0"
id="path1600-3" />
<path
style="fill:none;stroke:#0b1521;stroke-width:8.07104;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 51.741679,7.0646148 c 0,10.2421492 0,20.4831482 0,30.7229862"
id="path1600" />
<path
id="path1424"
style="fill:none;stroke:#0b1521;stroke-width:8"
transform="scale(-1)"
d="M -9.1945572,-51.633518 A 40.574177,40.574177 0 0 1 -49.768734,-11.059341" />
<path
id="path1424-9"
style="fill:none;stroke:#204a87;stroke-width:4"
transform="scale(-1)"
d="m -9.194561,-51.633518 a 40.574177,40.574177 0 0 1 -40.574177,40.574177" />
<path
id="path1424-9-1"
style="fill:none;stroke:#729fcf;stroke-width:2.05913"
transform="scale(-1)"
d="M -8.1945763,-51.759792 A 41.866669,41.681 0 0 1 -50.061245,-10.078793" />
<path
id="path1424-5"
style="fill:none;stroke:#0b1521;stroke-width:8"
transform="scale(-1)"
d="m -31.40913,-52.125439 a 18.340073,18.334726 0 0 1 -18.340073,18.334727" />
<path
id="path1424-5-2"
style="fill:none;stroke:#204a87;stroke-width:4"
transform="scale(-1)"
d="m -31.409134,-52.125439 a 18.340073,18.334726 0 0 1 -18.340073,18.334727" />
<path
id="path1424-5-2-1"
style="fill:none;stroke:#729fcf;stroke-width:2"
transform="scale(-1)"
d="m -30.06181,-52.266525 a 20.05135,19.815018 0 0 1 -20.051349,19.815017" />
<path
style="fill:none;stroke:#204a87;stroke-width:4.06864;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 51.740076,9.0505865 c 0,8.9137695 0,17.8265285 0,26.7382755"
id="path1801" />
<path
style="fill:none;stroke:#729fcf;stroke-width:1.91937;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 50.652877,9.0441144 c 0,8.1363316 0,16.2717496 0,24.4062446"
id="path1805" />
<path
style="fill:none;stroke:#204a87;stroke-width:4.03081;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 33.406426,53.768318 c -8.748793,0 -17.496589,0 -26.2433901,0"
id="path1801-8" />
<path
style="fill:none;stroke:#729fcf;stroke-width:1.89976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 31.072566,52.592731 c -7.970969,0 -15.941038,0 -23.9102001,0"
id="path1805-0" />
<g
transform="matrix(0.77869192,0,0,0.77869178,22.113855,13.126469)"
id="g3827-1-3-4"
style="stroke-width:1.28421">
<g
transform="translate(31.322131,40.570289)"
id="g3797-9-5-8"
style="stroke-width:1.28421">
<path
style="fill:#ef2929;stroke:#280000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6-8"
d="M -26.156204,5.582626 A 8.993818,8.9934077 0.02042283 1 1 -12.493793,17.282241 8.993818,8.9934077 0.02042283 1 1 -26.156204,5.582626 Z" />
<path
style="fill:url(#linearGradient3801-1-3-7);fill-opacity:1;stroke:#ef2929;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2-2"
d="M -24.633588,6.893588 A 6.9999997,7.0000001 0 1 1 -14,16 6.9999997,7.0000001 0 0 1 -24.633588,6.893588 Z" />
</g>
</g>
<g
transform="matrix(0.77869192,0,0,0.77869178,42.324719,-28.097589)"
id="g3827-1-3"
style="stroke-width:1.28421">
<g
transform="translate(31.322131,40.570289)"
id="g3797-9-5"
style="stroke-width:1.28421">
<path
style="fill:#ef2929;stroke:#280000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6"
d="M -26.156204,5.582626 A 8.993818,8.9934077 0.02042283 1 1 -12.493793,17.282241 8.993818,8.9934077 0.02042283 1 1 -26.156204,5.582626 Z" />
<path
style="fill:url(#linearGradient3801-1-3);fill-opacity:1;stroke:#ef2929;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2"
d="M -24.633588,6.893588 A 6.9999997,7.0000001 0 1 1 -14,16 6.9999997,7.0000001 0 0 1 -24.633588,6.893588 Z" />
</g>
</g>
<g
transform="matrix(0.68405397,0,0,0.68405385,42.737933,17.592911)"
id="g3827-1-3-1"
style="stroke-width:1.28421">
<g
transform="translate(31.322131,40.570289)"
id="g3797-9-5-9"
style="stroke-width:1.28421">
<path
style="fill:#ef2929;stroke:#280000;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-71-6-9"
d="M -26.156204,5.582626 A 8.993818,8.9934077 0.02042283 1 1 -12.493793,17.282241 8.993818,8.9934077 0.02042283 1 1 -26.156204,5.582626 Z" />
<path
style="fill:url(#linearGradient3801-1-3-9);fill-opacity:1;stroke:#ef2929;stroke-width:2.56841;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4250-7-3-2-20"
d="M -24.633588,6.893588 A 6.9999997,7.0000001 0 1 1 -14,16 6.9999997,7.0000001 0 0 1 -24.633588,6.893588 Z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
height="64"
width="64"
id="svg12"
sodipodi:docname="Sketcher_Pointer_Create_ArcSlot.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="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview10"
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="8.3195532"
inkscape:cx="46.697219"
inkscape:cy="36.179827"
inkscape:window-width="3840"
inkscape:window-height="1570"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="svg12" />
<defs
id="defs16" />
<g
id="crosshair"
style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter">
<path
d="m16,3v9m0,8v9m-13-13h9m8,0h9"
id="path9" />
</g>
<path
d="M 61.28154,17.379814 C 63.722444,36.365205 45.864357,60.711219 18.357238,60.559097"
id="path2"
style="fill:none;stroke:#cc0000;stroke-width:2"
sodipodi:nodetypes="cc" />
<path
d="M 41.173823,16.75257 C 42.514851,27.183102 32.703657,40.558748 17.591306,40.475173"
id="path2-5"
style="fill:none;stroke:#cc0000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
sodipodi:nodetypes="cc" />
<path
d="M 41.290295,17.504818 C 40.75553,13.345415 45.41165,7.6928587 51.43803,7.7261864"
id="path2-5-7"
style="fill:none;stroke:#cc0000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
sodipodi:nodetypes="cc" />
<path
d="m 51.22668,7.763288 c 4.159403,-0.534765 10.088188,3.590146 10.05486,9.616526"
id="path2-5-7-7"
style="fill:none;stroke:#cc0000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
sodipodi:nodetypes="cc" />
<path
d="M 18.357238,60.559097 C 14.197835,61.093862 7.9043506,56.345063 7.9376786,50.318683"
id="path2-5-7-5"
style="fill:none;stroke:#cc0000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
sodipodi:nodetypes="cc" />
<path
d="M 7.9747796,50.530033 C 7.4400146,46.37063 11.564926,40.441845 17.591306,40.475173"
id="path2-5-7-7-2"
style="fill:none;stroke:#cc0000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
sodipodi:nodetypes="cc" />
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
height="64"
width="64"
id="svg12"
sodipodi:docname="Sketcher_Pointer_Create_RectangleSlot.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="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview10"
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="8.3195532"
inkscape:cx="20.734287"
inkscape:cy="40.266585"
inkscape:window-width="3840"
inkscape:window-height="1570"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="svg12" />
<defs
id="defs16" />
<g
id="crosshair"
style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter">
<path
d="m16,3v9m0,8v9m-13-13h9m8,0h9"
id="path9" />
</g>
<line
x1="17.351849"
y1="62.403584"
x2="17.325741"
y2="40.130707"
id="line2"
style="fill:none;stroke:#cc0000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none" />
<line
x1="39.239552"
y1="18.421408"
x2="61.512409"
y2="18.3953"
id="line2-1"
style="fill:none;stroke:#cc0000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none" />
<path
d="M 60.284618,18.071227 C 62.725522,37.056618 44.867435,61.402632 17.360316,61.25051"
id="path2"
style="fill:none;stroke:#cc0000;stroke-width:2"
sodipodi:nodetypes="cc" />
<path
d="M 40.176901,17.443984 C 41.517929,27.874515 31.706735,41.250161 16.594384,41.166586"
id="path2-5"
style="fill:none;stroke:#cc0000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
sodipodi:nodetypes="cc" />
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -352,6 +352,22 @@ inline void SketcherAddWorkspaceRectangles<Gui::ToolBarItem>(Gui::ToolBarItem& g
geom << "Sketcher_CompCreateRectangles";
}
template<typename T>
void SketcherAddWorkspaceslots(T& geom);
template<>
inline void SketcherAddWorkspaceslots<Gui::MenuItem>(Gui::MenuItem& geom)
{
geom << "Sketcher_CreateSlot"
<< "Sketcher_CreateArcSlot";
}
template<>
inline void SketcherAddWorkspaceslots<Gui::ToolBarItem>(Gui::ToolBarItem& geom)
{
geom << "Sketcher_CompSlot";
}
template<typename T>
void SketcherAddWorkspaceFillets(T& geom);
@@ -378,8 +394,8 @@ inline void SketcherAddWorkbenchGeometries(T& geom)
<< "Sketcher_CreatePolyline";
SketcherAddWorkspaceRectangles(geom);
SketcherAddWorkspaceRegularPolygon(geom);
geom << "Sketcher_CreateSlot"
<< "Separator";
SketcherAddWorkspaceslots(geom);
geom << "Separator";
SketcherAddWorkspaceFillets(geom);
geom << "Sketcher_Trimming"
<< "Sketcher_Extend"