High DPI support: Convert sketcher cursors to SVG
Remove xpm
@@ -23,6 +23,7 @@
|
||||
|
||||
#include "PreCompiled.h"
|
||||
#ifndef _PreComp_
|
||||
# include <QString>
|
||||
# include <QApplication>
|
||||
# include <QBitmap>
|
||||
# include <QDir>
|
||||
@@ -36,7 +37,6 @@
|
||||
# include <QStyleOption>
|
||||
# include <sstream>
|
||||
#endif
|
||||
|
||||
#if defined (FC_OS_WIN32) && QT_VERSION < 0x050000
|
||||
#define QTWEBKIT
|
||||
#endif
|
||||
@@ -296,7 +296,8 @@ QPixmap BitmapFactoryInst::pixmap(const char* name) const
|
||||
return QPixmap(not_found);
|
||||
}
|
||||
|
||||
QPixmap BitmapFactoryInst::pixmapFromSvg(const char* name, const QSize& size) const
|
||||
QPixmap BitmapFactoryInst::pixmapFromSvg(const char* name, const QSizeF& size,
|
||||
const std::map<unsigned long, unsigned long>& colorMapping) const
|
||||
{
|
||||
// If an absolute path is given
|
||||
QPixmap icon;
|
||||
@@ -325,15 +326,26 @@ QPixmap BitmapFactoryInst::pixmapFromSvg(const char* name, const QSize& size) co
|
||||
QFile file(iconPath);
|
||||
if (file.open(QFile::ReadOnly | QFile::Text)) {
|
||||
QByteArray content = file.readAll();
|
||||
icon = pixmapFromSvg(content, size);
|
||||
icon = pixmapFromSvg(content, size, colorMapping);
|
||||
}
|
||||
}
|
||||
|
||||
return icon;
|
||||
}
|
||||
|
||||
QPixmap BitmapFactoryInst::pixmapFromSvg(const QByteArray& contents, const QSize& size) const
|
||||
QPixmap BitmapFactoryInst::pixmapFromSvg(const QByteArray& originalContents, const QSizeF& size,
|
||||
const std::map<unsigned long, unsigned long>& colorMapping) const
|
||||
{
|
||||
QString stringContents = QString::fromUtf8(originalContents);
|
||||
for ( const auto &colorToColor : colorMapping ) {
|
||||
ulong fromColor = colorToColor.first;
|
||||
ulong toColor = colorToColor.second;
|
||||
QString fromColorString = QString::fromLatin1(":#%1;").arg(fromColor, 6, 16, QChar::fromLatin1('0'));
|
||||
QString toColorString = QString::fromLatin1(":#%1;").arg(toColor, 6, 16, QChar::fromLatin1('0'));
|
||||
stringContents = stringContents.replace(fromColorString, toColorString);
|
||||
}
|
||||
QByteArray contents = stringContents.toUtf8();
|
||||
|
||||
#ifdef QTWEBKIT
|
||||
// There is a crash when using the Webkit engine in debug mode
|
||||
// for a couple of SVG files. Thus, use the qsvg plugin.
|
||||
@@ -419,7 +431,7 @@ QPixmap BitmapFactoryInst::pixmapFromSvg(const QByteArray& contents, const QSize
|
||||
return QPixmap::fromImage(image);
|
||||
#endif // QT_VERSION
|
||||
#else //QTWEBKIT
|
||||
QImage image(size, QImage::Format_ARGB32_Premultiplied);
|
||||
QImage image(size.toSize(), QImage::Format_ARGB32_Premultiplied);
|
||||
image.fill(0x00000000);
|
||||
|
||||
QPainter p(&image);
|
||||
|
||||
@@ -77,13 +77,19 @@ public:
|
||||
QPixmap pixmap(const char* name) const;
|
||||
/** Retrieves a pixmap by name and size created by an
|
||||
* scalable vector graphics (SVG).
|
||||
*
|
||||
* @param colorMapping - a dictionary of substitute colors.
|
||||
* Can be used to customize icon color scheme, e.g. crosshair color
|
||||
*/
|
||||
QPixmap pixmapFromSvg(const char* name, const QSize& size) const;
|
||||
QPixmap pixmapFromSvg(const char* name, const QSizeF& size,
|
||||
const std::map<unsigned long, unsigned long>& colorMapping = std::map<unsigned long, unsigned long>()) const;
|
||||
/** This method is provided for convenience and does the same
|
||||
* as the method above except that it creates the pixmap from
|
||||
* a byte array.
|
||||
* @param colorMapping - see above.
|
||||
*/
|
||||
QPixmap pixmapFromSvg(const QByteArray& contents, const QSize& size) const;
|
||||
QPixmap pixmapFromSvg(const QByteArray& contents, const QSizeF& size,
|
||||
const std::map<unsigned long, unsigned long>& colorMapping = std::map<unsigned long, unsigned long>()) const;
|
||||
/** Returns the names of all registered pixmaps.
|
||||
* To get the appropriate pixmaps call pixmap() for each name.
|
||||
*/
|
||||
|
||||
@@ -803,8 +803,6 @@ protected:
|
||||
*/
|
||||
std::vector<std::vector<SketcherGui::SelType> > allowedSelSequences;
|
||||
|
||||
const char** constraintCursor = 0;
|
||||
|
||||
virtual void applyConstraint(std::vector<SelIdPair> &, int) {}
|
||||
virtual void activated(int /*iMsg*/);
|
||||
virtual bool isActive(void)
|
||||
@@ -813,49 +811,11 @@ protected:
|
||||
|
||||
extern char cursor_crosshair_color[];
|
||||
|
||||
/* XPM */
|
||||
static const char *cursor_genericconstraint[]={
|
||||
"32 32 2 1",
|
||||
" c None",
|
||||
cursor_crosshair_color,
|
||||
" + ",
|
||||
" + ",
|
||||
" + ",
|
||||
" + ",
|
||||
" + ",
|
||||
" ",
|
||||
"+++++ +++++ ",
|
||||
" ",
|
||||
" + ",
|
||||
" + ",
|
||||
" + ",
|
||||
" + ",
|
||||
" + ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",};
|
||||
|
||||
class DrawSketchHandlerGenConstraint: public DrawSketchHandler
|
||||
{
|
||||
public:
|
||||
DrawSketchHandlerGenConstraint(const char* cursor[], CmdSketcherConstraint *_cmd)
|
||||
: constraintCursor(cursor), cmd(_cmd), seqIndex(0) {}
|
||||
DrawSketchHandlerGenConstraint(CmdSketcherConstraint *_cmd)
|
||||
: cmd(_cmd), seqIndex(0) {}
|
||||
virtual ~DrawSketchHandlerGenConstraint()
|
||||
{
|
||||
Gui::Selection().rmvSelectionGate();
|
||||
@@ -872,17 +832,25 @@ public:
|
||||
Gui::Selection().rmvSelectionGate();
|
||||
Gui::Selection().addSelectionGate(selFilterGate);
|
||||
|
||||
setCrosshairColor();
|
||||
|
||||
// Constrain icon size in px
|
||||
int iconSize = 16;
|
||||
QPixmap cursorPixmap(cursor_genericconstraint),
|
||||
icon = Gui::BitmapFactory().pixmap(cmd->sPixmap).scaledToWidth(iconSize);
|
||||
qreal pixelRatio = devicePixelRatio();
|
||||
const unsigned long defaultCrosshairColor = 0xFFFFFF;
|
||||
unsigned long color = getCrosshairColor();
|
||||
auto colorMapping = std::map<unsigned long, unsigned long>();
|
||||
colorMapping[defaultCrosshairColor] = color;
|
||||
|
||||
qreal fullIconWidth = 32 * pixelRatio;
|
||||
qreal iconWidth = 16 * pixelRatio;
|
||||
QPixmap cursorPixmap = Gui::BitmapFactory().pixmapFromSvg("Sketcher_Crosshair", QSizeF(fullIconWidth, fullIconWidth), colorMapping),
|
||||
icon = Gui::BitmapFactory().pixmapFromSvg(cmd->sPixmap, QSizeF(iconWidth, iconWidth));
|
||||
QPainter cursorPainter;
|
||||
cursorPainter.begin(&cursorPixmap);
|
||||
cursorPainter.drawPixmap(16, 16, icon);
|
||||
cursorPainter.drawPixmap(16 * pixelRatio, 16 * pixelRatio, icon);
|
||||
cursorPainter.end();
|
||||
setCursor(cursorPixmap, 7, 7);
|
||||
#if QT_VERSION >= 0x050000
|
||||
cursorPixmap.setDevicePixelRatio(pixelRatio);
|
||||
#endif
|
||||
setCursor(cursorPixmap, 7 * pixelRatio, 7 * pixelRatio, false);
|
||||
}
|
||||
|
||||
virtual void mouseMove(Base::Vector2d /*onSketchPos*/) {}
|
||||
@@ -983,7 +951,6 @@ public:
|
||||
}
|
||||
|
||||
protected:
|
||||
const char** constraintCursor;
|
||||
CmdSketcherConstraint* cmd;
|
||||
|
||||
GenericConstraintSelection* selFilterGate = nullptr;
|
||||
@@ -1018,51 +985,12 @@ protected:
|
||||
void CmdSketcherConstraint::activated(int /*iMsg*/)
|
||||
{
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
|
||||
/* XPM */
|
||||
static const char *cursor_createhoriconstraint[]={
|
||||
"32 32 3 1",
|
||||
"+ c white",
|
||||
"# c red",
|
||||
". c None",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"................................",
|
||||
"+++++...+++++...................",
|
||||
"................................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+......#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............############.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................"};
|
||||
|
||||
class CmdSketcherConstrainHorizontal : public CmdSketcherConstraint
|
||||
{
|
||||
public:
|
||||
@@ -1090,7 +1018,6 @@ CmdSketcherConstrainHorizontal::CmdSketcherConstrainHorizontal()
|
||||
eType = ForEdit;
|
||||
|
||||
allowedSelSequences = {{SelEdge}};
|
||||
constraintCursor = cursor_createhoriconstraint;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainHorizontal::activated(int iMsg)
|
||||
@@ -1107,7 +1034,7 @@ void CmdSketcherConstrainHorizontal::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
@@ -1272,44 +1199,6 @@ void CmdSketcherConstrainHorizontal::applyConstraint(std::vector<SelIdPair> &sel
|
||||
|
||||
// ================================================================================
|
||||
|
||||
static const char *cursor_createvertconstraint[]={
|
||||
"32 32 3 1",
|
||||
"+ c white",
|
||||
"# c red",
|
||||
". c None",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"................................",
|
||||
"+++++...+++++...................",
|
||||
"................................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+......#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
".............#..........#.......",
|
||||
"..............#........#........",
|
||||
"...............#......#.........",
|
||||
"................#....#..........",
|
||||
".................#..#...........",
|
||||
"..................##............",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................"};
|
||||
|
||||
class CmdSketcherConstrainVertical : public CmdSketcherConstraint
|
||||
{
|
||||
public:
|
||||
@@ -1337,7 +1226,6 @@ CmdSketcherConstrainVertical::CmdSketcherConstrainVertical()
|
||||
eType = ForEdit;
|
||||
|
||||
allowedSelSequences = {{SelEdge}};
|
||||
constraintCursor = cursor_createvertconstraint;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainVertical::activated(int iMsg)
|
||||
@@ -1354,7 +1242,7 @@ void CmdSketcherConstrainVertical::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
@@ -1516,45 +1404,6 @@ void CmdSketcherConstrainVertical::applyConstraint(std::vector<SelIdPair> &selSe
|
||||
|
||||
// ======================================================================================
|
||||
|
||||
/* XPM */
|
||||
static const char *cursor_createlock[]={
|
||||
"32 32 3 1",
|
||||
"+ c white",
|
||||
"# c red",
|
||||
". c None",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"................................",
|
||||
"+++++...+++++...................",
|
||||
"................................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+..........###............",
|
||||
"................######..........",
|
||||
"...............##....##.........",
|
||||
"..............##......##........",
|
||||
"..............##......##........",
|
||||
".............############.......",
|
||||
".............############.......",
|
||||
".............############.......",
|
||||
".............############.......",
|
||||
".............############.......",
|
||||
".............############.......",
|
||||
".............############.......",
|
||||
".............############.......",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................",
|
||||
"................................"};
|
||||
|
||||
class CmdSketcherConstrainLock : public CmdSketcherConstraint
|
||||
{
|
||||
public:
|
||||
@@ -1581,7 +1430,6 @@ CmdSketcherConstrainLock::CmdSketcherConstrainLock()
|
||||
eType = ForEdit;
|
||||
|
||||
allowedSelSequences = {{SelVertex}};
|
||||
constraintCursor = cursor_createlock;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainLock::activated(int iMsg)
|
||||
@@ -1598,7 +1446,7 @@ void CmdSketcherConstrainLock::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
@@ -1777,45 +1625,6 @@ void CmdSketcherConstrainLock::updateAction(int mode)
|
||||
|
||||
// ======================================================================================
|
||||
|
||||
/* XPM */
|
||||
static const char *cursor_createblock[]={
|
||||
"32 32 3 1",
|
||||
"+ c white",
|
||||
"# c red",
|
||||
". c None",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"................................",
|
||||
"+++++...+++++...................",
|
||||
"................................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+.........................",
|
||||
"......+..........###............",
|
||||
"....................##..........",
|
||||
".....................##.........",
|
||||
"......................##........",
|
||||
"......................##........",
|
||||
".............############.......",
|
||||
".............###########........",
|
||||
".............##########.........",
|
||||
".............########...........",
|
||||
".............#######............",
|
||||
".............########...........",
|
||||
".............##########.........",
|
||||
".............###########........",
|
||||
".............############.......",
|
||||
"......................##........",
|
||||
"......................##........",
|
||||
".....................##.........",
|
||||
"....................##..........",
|
||||
".................###............",
|
||||
"................................"};
|
||||
|
||||
class CmdSketcherConstrainBlock : public CmdSketcherConstraint
|
||||
{
|
||||
public:
|
||||
@@ -1841,7 +1650,6 @@ CmdSketcherConstrainBlock::CmdSketcherConstrainBlock()
|
||||
eType = ForEdit;
|
||||
|
||||
allowedSelSequences = {{SelEdge}};
|
||||
constraintCursor = cursor_createblock;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainBlock::activated(int iMsg)
|
||||
@@ -1858,7 +1666,7 @@ void CmdSketcherConstrainBlock::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
@@ -2147,7 +1955,6 @@ CmdSketcherConstrainCoincident::CmdSketcherConstrainCoincident()
|
||||
eType = ForEdit;
|
||||
|
||||
allowedSelSequences = {{SelVertex, SelVertexOrRoot}, {SelRoot, SelVertex}};
|
||||
constraintCursor = cursor_createcoincident;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainCoincident::activated(int iMsg)
|
||||
@@ -2164,7 +1971,7 @@ void CmdSketcherConstrainCoincident::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
// TODO: Get the exact message from git history and put it here
|
||||
@@ -2339,7 +2146,6 @@ CmdSketcherConstrainDistance::CmdSketcherConstrainDistance()
|
||||
{SelEdge}, {SelExternalEdge},
|
||||
{SelVertex, SelEdgeOrAxis}, {SelRoot, SelEdge},
|
||||
{SelVertex, SelExternalEdge}, {SelRoot, SelExternalEdge}};
|
||||
constraintCursor = cursor_genericconstraint;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainDistance::activated(int iMsg)
|
||||
@@ -2355,7 +2161,7 @@ void CmdSketcherConstrainDistance::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
|
||||
getSelection().clearSelection();
|
||||
}
|
||||
@@ -2650,45 +2456,6 @@ void CmdSketcherConstrainDistance::updateAction(int mode)
|
||||
|
||||
// ======================================================================================
|
||||
|
||||
/* XPM */
|
||||
static const char * cursor_createpointonobj[] = {
|
||||
"32 32 3 1",
|
||||
" c None",
|
||||
". c #FFFFFF",
|
||||
"+ c #FF0000",
|
||||
" . ",
|
||||
" . ++++",
|
||||
" . ++++++",
|
||||
" . +++++++ ",
|
||||
" . ++++++ ",
|
||||
" ++++++ ",
|
||||
"..... ..... +++++ ",
|
||||
" +++++ ",
|
||||
" . +++ ++++ ",
|
||||
" . +++++++++ ",
|
||||
" . ++++++++ ",
|
||||
" . +++++++++ ",
|
||||
" . +++++++++ ",
|
||||
" +++++++++ ",
|
||||
" +++++++ ",
|
||||
" ++++++++ ",
|
||||
" +++++++ ",
|
||||
" +++ ",
|
||||
" +++ ",
|
||||
" +++ ",
|
||||
" +++ ",
|
||||
" +++ ",
|
||||
" +++ ",
|
||||
" +++ ",
|
||||
" +++ ",
|
||||
" ++ ",
|
||||
" +++ ",
|
||||
" ++ ",
|
||||
" +++ ",
|
||||
" +++ ",
|
||||
" ++ ",
|
||||
" ++ "};
|
||||
|
||||
class CmdSketcherConstrainPointOnObject : public CmdSketcherConstraint
|
||||
{
|
||||
public:
|
||||
@@ -2720,7 +2487,6 @@ CmdSketcherConstrainPointOnObject::CmdSketcherConstrainPointOnObject()
|
||||
{SelVertex, SelExternalEdge},
|
||||
{SelEdge, SelVertexOrRoot}, {SelEdgeOrAxis, SelVertex},
|
||||
{SelExternalEdge, SelVertex}};
|
||||
constraintCursor = cursor_createpointonobj;
|
||||
|
||||
}
|
||||
|
||||
@@ -2737,7 +2503,7 @@ void CmdSketcherConstrainPointOnObject::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
// TODO: Get the exact message from git history and put it here
|
||||
@@ -2903,7 +2669,6 @@ CmdSketcherConstrainDistanceX::CmdSketcherConstrainDistanceX()
|
||||
|
||||
allowedSelSequences = {{SelVertex, SelVertexOrRoot}, {SelRoot, SelVertex},
|
||||
{SelEdge}, {SelExternalEdge}}; // Can't do single vertex because its a prefix for 2 vertices
|
||||
constraintCursor = cursor_genericconstraint;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainDistanceX::activated(int iMsg)
|
||||
@@ -2919,7 +2684,7 @@ void CmdSketcherConstrainDistanceX::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
}
|
||||
else {
|
||||
@@ -3150,7 +2915,6 @@ CmdSketcherConstrainDistanceY::CmdSketcherConstrainDistanceY()
|
||||
|
||||
allowedSelSequences = {{SelVertex, SelVertexOrRoot}, {SelRoot, SelVertex},
|
||||
{SelEdge}, {SelExternalEdge}}; // Can't do single vertex because its a prefix for 2 vertices
|
||||
constraintCursor = cursor_genericconstraint;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainDistanceY::activated(int iMsg)
|
||||
@@ -3166,7 +2930,7 @@ void CmdSketcherConstrainDistanceY::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
// TODO: Get the exact message from git history and put it here
|
||||
@@ -3365,45 +3129,6 @@ void CmdSketcherConstrainDistanceY::updateAction(int mode)
|
||||
|
||||
//=================================================================================
|
||||
|
||||
/* XPM */
|
||||
static const char *cursor_createparallel[]={
|
||||
"32 32 3 1",
|
||||
" c None",
|
||||
". c #FFFFFF",
|
||||
"+ c #FF0000",
|
||||
" . ",
|
||||
" . ",
|
||||
" . ",
|
||||
" . ",
|
||||
" . ",
|
||||
" ",
|
||||
"..... ..... ",
|
||||
" ",
|
||||
" . ",
|
||||
" . ",
|
||||
" . + + ",
|
||||
" . ++ ++ ",
|
||||
" . + + ",
|
||||
" ++ ++ ",
|
||||
" + + ",
|
||||
" ++ ++ ",
|
||||
" + + ",
|
||||
" ++ ++ ",
|
||||
" + + ",
|
||||
" ++ ++ ",
|
||||
" + + ",
|
||||
" ++ ++ ",
|
||||
" + + ",
|
||||
" ++ ++ ",
|
||||
" + + ",
|
||||
" ++ ++ ",
|
||||
" + + ",
|
||||
" ++ ++ ",
|
||||
" + + ",
|
||||
" ",
|
||||
" ",
|
||||
" "};
|
||||
|
||||
class CmdSketcherConstrainParallel : public CmdSketcherConstraint
|
||||
{
|
||||
public:
|
||||
@@ -3432,7 +3157,6 @@ CmdSketcherConstrainParallel::CmdSketcherConstrainParallel()
|
||||
// TODO: Also needed: ExternalEdges
|
||||
allowedSelSequences = {{SelEdge, SelEdgeOrAxis}, {SelEdgeOrAxis, SelEdge},
|
||||
{SelEdge, SelExternalEdge}, {SelExternalEdge, SelEdge}};
|
||||
constraintCursor = cursor_createparallel;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainParallel::activated(int iMsg)
|
||||
@@ -3448,7 +3172,7 @@ void CmdSketcherConstrainParallel::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
// TODO: Get the exact message from git history and put it here
|
||||
@@ -3555,45 +3279,6 @@ void CmdSketcherConstrainParallel::applyConstraint(std::vector<SelIdPair> &selSe
|
||||
|
||||
// ======================================================================================
|
||||
|
||||
/* XPM */
|
||||
static const char *cursor_createperpconstraint[] = {
|
||||
"32 32 3 1",
|
||||
" c None",
|
||||
". c #FFFFFF",
|
||||
"+ c #FF0000",
|
||||
" . ",
|
||||
" . ",
|
||||
" . ",
|
||||
" . ",
|
||||
" . ",
|
||||
" ",
|
||||
"..... ..... ",
|
||||
" ",
|
||||
" . ",
|
||||
" . ",
|
||||
" . ",
|
||||
" . ++ ",
|
||||
" . ++ ",
|
||||
" ++ ",
|
||||
" ++ ",
|
||||
" ++ ",
|
||||
" ++ ",
|
||||
" ++ ",
|
||||
" ++ ",
|
||||
" ++ ",
|
||||
" ++ ",
|
||||
" ++ ",
|
||||
" ++ ",
|
||||
" ++ ",
|
||||
" ++ ",
|
||||
" ++ ",
|
||||
" ++ ",
|
||||
" ++ ",
|
||||
" ++++++++++++++++++++ ",
|
||||
" ++++++++++++++++++++ ",
|
||||
" ",
|
||||
" "};
|
||||
|
||||
class CmdSketcherConstrainPerpendicular : public CmdSketcherConstraint
|
||||
{
|
||||
public:
|
||||
@@ -3631,7 +3316,6 @@ CmdSketcherConstrainPerpendicular::CmdSketcherConstrainPerpendicular()
|
||||
{SelEdge, SelVertexOrRoot, SelExternalEdge},
|
||||
{SelExternalEdge, SelVertexOrRoot, SelEdge}};
|
||||
;
|
||||
constraintCursor = cursor_createperpconstraint;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainPerpendicular::activated(int iMsg)
|
||||
@@ -3654,7 +3338,7 @@ void CmdSketcherConstrainPerpendicular::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
// TODO: Get the exact message from git history and put it here
|
||||
@@ -4237,7 +3921,6 @@ CmdSketcherConstrainTangent::CmdSketcherConstrainTangent()
|
||||
{SelEdge, SelVertexOrRoot, SelExternalEdge},
|
||||
{SelExternalEdge, SelVertexOrRoot, SelEdge}, /* Two Curves and a Point */
|
||||
{SelVertexOrRoot, SelVertex} /*Two Endpoints*/ /*No Place for One Endpoint and One Curve*/};
|
||||
constraintCursor = cursor_genericconstraint;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainTangent::activated(int iMsg)
|
||||
@@ -4260,7 +3943,7 @@ void CmdSketcherConstrainTangent::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
strError = QObject::tr("Select some geometry from the sketch.", "tangent constraint");
|
||||
@@ -4871,7 +4554,6 @@ CmdSketcherConstrainRadius::CmdSketcherConstrainRadius()
|
||||
eType = ForEdit;
|
||||
|
||||
allowedSelSequences = {{SelEdge}, {SelExternalEdge}};
|
||||
constraintCursor = cursor_genericconstraint;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainRadius::activated(int iMsg)
|
||||
@@ -4887,7 +4569,7 @@ void CmdSketcherConstrainRadius::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
// TODO: Get the exact message from git history and put it here
|
||||
@@ -5330,7 +5012,6 @@ CmdSketcherConstrainDiameter::CmdSketcherConstrainDiameter()
|
||||
eType = ForEdit;
|
||||
|
||||
allowedSelSequences = {{SelEdge}, {SelExternalEdge}};
|
||||
constraintCursor = cursor_genericconstraint;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainDiameter::activated(int iMsg)
|
||||
@@ -5346,7 +5027,7 @@ void CmdSketcherConstrainDiameter::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
// TODO: Get the exact message from git history and put it here
|
||||
@@ -5904,7 +5585,6 @@ CmdSketcherConstrainAngle::CmdSketcherConstrainAngle()
|
||||
{SelVertexOrRoot, SelEdge, SelExternalEdge},
|
||||
{SelVertexOrRoot, SelExternalEdge, SelEdge},
|
||||
{SelVertexOrRoot, SelExternalEdge, SelExternalEdge}};
|
||||
constraintCursor = cursor_genericconstraint;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainAngle::activated(int iMsg)
|
||||
@@ -5921,7 +5601,7 @@ void CmdSketcherConstrainAngle::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
// TODO: Get the exact message from git history and put it here
|
||||
@@ -6394,7 +6074,6 @@ CmdSketcherConstrainEqual::CmdSketcherConstrainEqual()
|
||||
|
||||
allowedSelSequences = {{SelEdge, SelEdge}, {SelEdge, SelExternalEdge},
|
||||
{SelExternalEdge, SelEdge}}; // Only option for equal constraint
|
||||
constraintCursor = cursor_genericconstraint;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainEqual::activated(int iMsg)
|
||||
@@ -6410,7 +6089,7 @@ void CmdSketcherConstrainEqual::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
@@ -6592,7 +6271,6 @@ CmdSketcherConstrainSymmetric::CmdSketcherConstrainSymmetric()
|
||||
{SelVertex, SelVertexOrRoot, SelVertex},
|
||||
{SelVertex, SelVertex, SelVertexOrRoot},
|
||||
{SelVertexOrRoot, SelVertex, SelVertex}};
|
||||
constraintCursor = cursor_genericconstraint;
|
||||
}
|
||||
|
||||
void CmdSketcherConstrainSymmetric::activated(int iMsg)
|
||||
@@ -6608,7 +6286,7 @@ void CmdSketcherConstrainSymmetric::activated(int iMsg)
|
||||
|
||||
if (constraintMode) {
|
||||
ActivateHandler(getActiveGuiDocument(),
|
||||
new DrawSketchHandlerGenConstraint(constraintCursor, this));
|
||||
new DrawSketchHandlerGenConstraint(this));
|
||||
getSelection().clearSelection();
|
||||
} else {
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
|
||||
@@ -91,20 +91,130 @@ int DrawSketchHandler::getHighestCurveIndex(void)
|
||||
return sketchgui->getSketchObject()->getHighestCurveIndex();
|
||||
}
|
||||
|
||||
void DrawSketchHandler::setCursor(const QPixmap &p,int x,int y)
|
||||
void DrawSketchHandler::setCrosshairCursor(const char* svgName) {
|
||||
QString cursorName = QString::fromLatin1(svgName);
|
||||
const unsigned long defaultCrosshairColor = 0xFFFFFF;
|
||||
unsigned long color = getCrosshairColor();
|
||||
auto colorMapping = std::map<unsigned long, unsigned long>();
|
||||
colorMapping[defaultCrosshairColor] = color;
|
||||
setSvgCursor(cursorName, 7, 7, colorMapping);
|
||||
}
|
||||
|
||||
void DrawSketchHandler::setSvgCursor(const QString & cursorName, int x, int y, const std::map<unsigned long, unsigned long>& colorMapping)
|
||||
{
|
||||
qreal pRatio = devicePixelRatio();
|
||||
qreal defaultCursorSize = 32;
|
||||
qreal hotX = x * pRatio;
|
||||
qreal hotY = y * pRatio;
|
||||
qreal cursorSize = defaultCursorSize * pRatio;
|
||||
|
||||
QPixmap pointer = Gui::BitmapFactory().pixmapFromSvg(cursorName.toStdString().c_str(), QSizeF(cursorSize, cursorSize), colorMapping);
|
||||
#if QT_VERSION >= 0x050000
|
||||
pointer.setDevicePixelRatio(pRatio);
|
||||
#endif
|
||||
|
||||
setCursor(pointer, hotX, hotY, false);
|
||||
}
|
||||
|
||||
void DrawSketchHandler::setCursor(const QPixmap &p,int x,int y, bool autoScale)
|
||||
{
|
||||
Gui::MDIView* view = Gui::getMainWindow()->activeWindow();
|
||||
if (view && view->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
|
||||
Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer();
|
||||
|
||||
oldCursor = viewer->getWidget()->cursor();
|
||||
QCursor cursor(p, x, y);
|
||||
|
||||
QCursor cursor;
|
||||
QPixmap p1(p);
|
||||
// TODO remove autoScale after all cursors are SVG-based
|
||||
if (autoScale) {
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
|
||||
qreal pRatio = viewer->devicePixelRatio();
|
||||
#else
|
||||
qreal pRatio = 1;
|
||||
#endif
|
||||
int newWidth = p.width()*pRatio;
|
||||
int newHeight = p.height()*pRatio;
|
||||
p1 = p1.scaled(newWidth, newHeight,Qt::KeepAspectRatio,Qt::SmoothTransformation);
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
|
||||
p1.setDevicePixelRatio(pRatio);
|
||||
#endif
|
||||
cursor = QCursor(p1, x * pRatio, y * pRatio);
|
||||
} else {
|
||||
// already scaled
|
||||
cursor = QCursor(p1, x, y);
|
||||
}
|
||||
|
||||
actCursor = cursor;
|
||||
actCursorPixmap = p1;
|
||||
|
||||
viewer->getWidget()->setCursor(cursor);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawSketchHandler::addCursorTail( std::vector<QPixmap> &pixmaps ) {
|
||||
// Create a pixmap that will contain icon and each autoconstraint icon
|
||||
Gui::MDIView* view = Gui::getMainWindow()->activeWindow();
|
||||
if (view && view->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
|
||||
QPixmap baseIcon = QPixmap(actCursorPixmap);
|
||||
#if QT_VERSION >= 0x050000
|
||||
baseIcon.setDevicePixelRatio(actCursorPixmap.devicePixelRatio());
|
||||
qreal pixelRatio = baseIcon.devicePixelRatio();
|
||||
#else
|
||||
qreal pixelRatio = 1;
|
||||
#endif
|
||||
// cursor size in device independent pixels
|
||||
qreal baseCursorWidth = baseIcon.width();
|
||||
qreal baseCursorHeight = baseIcon.height();
|
||||
|
||||
int tailWidth = 0;
|
||||
for (auto const& p: pixmaps) {
|
||||
tailWidth += p.width();
|
||||
}
|
||||
|
||||
int newIconWidth = baseCursorWidth + tailWidth;
|
||||
int newIconHeight = baseCursorHeight;
|
||||
|
||||
QPixmap newIcon(newIconWidth, newIconHeight);
|
||||
newIcon.fill(Qt::transparent);
|
||||
|
||||
QPainter qp;
|
||||
qp.begin(&newIcon);
|
||||
|
||||
qp.drawPixmap(QPointF(0,0), baseIcon.scaled(
|
||||
baseCursorWidth * pixelRatio,
|
||||
baseCursorHeight * pixelRatio,
|
||||
Qt::KeepAspectRatio,
|
||||
Qt::SmoothTransformation
|
||||
));
|
||||
|
||||
// Iterate through pixmaps and them to the cursor pixmap
|
||||
std::vector<QPixmap>::iterator pit=pixmaps.begin();
|
||||
int i = 0;
|
||||
qreal currentIconX = baseCursorWidth;
|
||||
qreal currentIconY;
|
||||
|
||||
for (; pit != pixmaps.end(); ++pit, i++) {
|
||||
QPixmap icon = *pit;
|
||||
currentIconY = baseCursorHeight - icon.height();
|
||||
qp.drawPixmap(QPointF(currentIconX, currentIconY), icon);
|
||||
currentIconX += icon.width();
|
||||
}
|
||||
|
||||
qp.end(); // Finish painting
|
||||
|
||||
// Create the new cursor with the icon.
|
||||
QPoint p=actCursor.hotSpot();
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
|
||||
newIcon.setDevicePixelRatio(pixelRatio);
|
||||
#endif
|
||||
|
||||
QCursor newCursor(newIcon, p.x(), p.y());
|
||||
applyCursor(newCursor);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawSketchHandler::applyCursor(void)
|
||||
{
|
||||
applyCursor(actCursor);
|
||||
@@ -128,6 +238,64 @@ void DrawSketchHandler::unsetCursor(void)
|
||||
}
|
||||
}
|
||||
|
||||
qreal DrawSketchHandler::devicePixelRatio() {
|
||||
qreal pixelRatio = 1;
|
||||
# if QT_VERSION >= 0x050000
|
||||
Gui::MDIView* view = Gui::getMainWindow()->activeWindow();
|
||||
if (view && view->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
|
||||
Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer();
|
||||
pixelRatio = viewer->devicePixelRatio();
|
||||
}
|
||||
# endif
|
||||
return pixelRatio;
|
||||
}
|
||||
|
||||
std::vector<QPixmap> DrawSketchHandler::suggestedConstraintsPixmaps(
|
||||
std::vector<AutoConstraint> &suggestedConstraints) {
|
||||
std::vector<QPixmap> pixmaps;
|
||||
// Iterate through AutoConstraints types and get their pixmaps
|
||||
std::vector<AutoConstraint>::iterator it=suggestedConstraints.begin();
|
||||
int i = 0;
|
||||
for (; it != suggestedConstraints.end(); ++it, i++) {
|
||||
QString iconType;
|
||||
switch (it->Type)
|
||||
{
|
||||
case Horizontal:
|
||||
iconType = QString::fromLatin1("Constraint_Horizontal");
|
||||
break;
|
||||
case Vertical:
|
||||
iconType = QString::fromLatin1("Constraint_Vertical");
|
||||
break;
|
||||
case Coincident:
|
||||
iconType = QString::fromLatin1("Constraint_PointOnPoint");
|
||||
break;
|
||||
case PointOnObject:
|
||||
iconType = QString::fromLatin1("Constraint_PointOnObject");
|
||||
break;
|
||||
case Tangent:
|
||||
iconType = QString::fromLatin1("Constraint_Tangent");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (!iconType.isEmpty()) {
|
||||
qreal pixelRatio = 1;
|
||||
# if QT_VERSION >= 0x050000
|
||||
Gui::MDIView* view = Gui::getMainWindow()->activeWindow();
|
||||
if (view && view->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
|
||||
Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer();
|
||||
pixelRatio = viewer->devicePixelRatio();
|
||||
}
|
||||
# endif
|
||||
int iconWidth = 16 * pixelRatio;
|
||||
QPixmap icon = Gui::BitmapFactory()
|
||||
.pixmapFromSvg(iconType.toStdString().c_str(), QSize(iconWidth, iconWidth));
|
||||
pixmaps.push_back(icon);
|
||||
}
|
||||
}
|
||||
return pixmaps;
|
||||
}
|
||||
|
||||
int DrawSketchHandler::seekAutoConstraint(std::vector<AutoConstraint> &suggestedConstraints,
|
||||
const Base::Vector2d& Pos, const Base::Vector2d& Dir,
|
||||
AutoConstraint::TargetType type)
|
||||
@@ -502,58 +670,8 @@ void DrawSketchHandler::createAutoConstraints(const std::vector<AutoConstraint>
|
||||
|
||||
void DrawSketchHandler::renderSuggestConstraintsCursor(std::vector<AutoConstraint> &suggestedConstraints)
|
||||
{
|
||||
// Auto Constraint icon size in px
|
||||
int iconSize = 16;
|
||||
|
||||
// Create a pixmap that will contain icon and each autoconstraint icon
|
||||
QPixmap baseIcon = actCursor.pixmap();
|
||||
QPixmap newIcon(baseIcon.width() + suggestedConstraints.size() * iconSize,
|
||||
baseIcon.height());
|
||||
newIcon.fill(Qt::transparent);
|
||||
|
||||
QPainter qp;
|
||||
qp.begin(&newIcon);
|
||||
|
||||
qp.drawPixmap(0,0, baseIcon);
|
||||
|
||||
// Iterate through AutoConstraints type and add icons to the cursor pixmap
|
||||
std::vector<AutoConstraint>::iterator it=suggestedConstraints.begin();
|
||||
int i = 0;
|
||||
for (; it != suggestedConstraints.end(); ++it, i++) {
|
||||
QString iconType;
|
||||
switch (it->Type)
|
||||
{
|
||||
case Horizontal:
|
||||
iconType = QString::fromLatin1("Constraint_Horizontal");
|
||||
break;
|
||||
case Vertical:
|
||||
iconType = QString::fromLatin1("Constraint_Vertical");
|
||||
break;
|
||||
case Coincident:
|
||||
iconType = QString::fromLatin1("Constraint_PointOnPoint");
|
||||
break;
|
||||
case PointOnObject:
|
||||
iconType = QString::fromLatin1("Constraint_PointOnObject");
|
||||
break;
|
||||
case Tangent:
|
||||
iconType = QString::fromLatin1("Constraint_Tangent");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!iconType.isEmpty()) {
|
||||
QPixmap icon = Gui::BitmapFactory().pixmap(iconType.toLatin1()).scaledToWidth(iconSize);
|
||||
qp.drawPixmap(QPoint(baseIcon.width() + i * iconSize, baseIcon.height() - iconSize), icon);
|
||||
}
|
||||
}
|
||||
|
||||
qp.end(); // Finish painting
|
||||
|
||||
// Create the new cursor with the icon.
|
||||
QPoint p=actCursor.hotSpot();
|
||||
QCursor newCursor(newIcon, p.x(), p.y());
|
||||
applyCursor(newCursor);
|
||||
std::vector<QPixmap> pixmaps = suggestedConstraintsPixmaps(suggestedConstraints);
|
||||
addCursorTail(pixmaps);
|
||||
}
|
||||
|
||||
void DrawSketchHandler::setPositionText(const Base::Vector2d &Pos, const SbString &text)
|
||||
|
||||
@@ -94,15 +94,34 @@ public:
|
||||
|
||||
protected:
|
||||
// helpers
|
||||
void setCursor( const QPixmap &p,int x,int y );
|
||||
/**
|
||||
* Sets a cursor for 3D inventor view.
|
||||
* pixmap as a cursor image in device independent pixels.
|
||||
*
|
||||
* \param autoScale - set this to false if pixmap already scaled for HiDPI
|
||||
**/
|
||||
void setCursor(const QPixmap &pixmap, int x,int y, bool autoScale=true);
|
||||
void setSvgCursor(const QString &svgName, int x, int y,
|
||||
const std::map<unsigned long, unsigned long>& colorMapping = std::map<unsigned long, unsigned long>());
|
||||
void addCursorTail(std::vector<QPixmap> &pixmaps);
|
||||
void unsetCursor(void);
|
||||
void applyCursor(void);
|
||||
void applyCursor(QCursor &newCursor);
|
||||
void setCrosshairColor();
|
||||
unsigned long getCrosshairColor();
|
||||
qreal devicePixelRatio();
|
||||
void setCrosshairCursor(const char* svgName);
|
||||
|
||||
/**
|
||||
* Returns contraints icons scaled to width.
|
||||
**/
|
||||
std::vector<QPixmap> suggestedConstraintsPixmaps(
|
||||
std::vector<AutoConstraint> &suggestedConstraints);
|
||||
|
||||
ViewProviderSketch *sketchgui;
|
||||
QCursor oldCursor;
|
||||
QCursor actCursor;
|
||||
QPixmap actCursorPixmap;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
<file>icons/Sketcher_Conics_Ellipse_3points.svg</file>
|
||||
<file>icons/Sketcher_Conics_Ellipse_Center.svg</file>
|
||||
<file>icons/Sketcher_ConnectLines.svg</file>
|
||||
<file>icons/Sketcher_Crosshair.svg</file>
|
||||
<file>icons/Sketcher_ConstrainBlock.svg</file>
|
||||
<file>icons/Sketcher_ConstrainCoincident.svg</file>
|
||||
<file>icons/Sketcher_ConstrainDistance.svg</file>
|
||||
@@ -159,6 +160,26 @@
|
||||
<file>icons/Sketcher_Move.svg</file>
|
||||
<file>icons/Sketcher_NewSketch.svg</file>
|
||||
<file alias="icons/preferences-sketcher.svg">icons/Sketcher_NewSketch.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Slot.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Create_Box.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Create_Line.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Create_Lineset.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Create_Arc.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Create_3PointArc.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Create_Circle.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Create_Ellipse.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Create_ArcOfEllipse.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Create_ArcOfHyperbola.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Create_ArcOfParabola.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Create_BSpline.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Create_3PointCircle.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Create_Point.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Create_Fillet.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Trimming.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Extension.svg</file>
|
||||
<file>icons/Sketcher_Pointer_Regular_Polygon.svg</file>
|
||||
<file>icons/Sketcher_Pointer_External.svg</file>
|
||||
<file>icons/Sketcher_Pointer_CarbonCopy.svg</file>
|
||||
<file>icons/Sketcher_Parabolic_Arc.svg</file>
|
||||
<file>icons/Sketcher_Parabolic_Arc_Constr.svg</file>
|
||||
<file>icons/Sketcher_ProfilesHexagon1.svg</file>
|
||||
|
||||
@@ -1,525 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="64px"
|
||||
height="64px"
|
||||
id="svg2816"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.2 (unknown)"
|
||||
sodipodi:docname="Sketcher_ConstrainBlock.svg">
|
||||
<defs
|
||||
id="defs2818">
|
||||
<linearGradient
|
||||
id="linearGradient3602">
|
||||
<stop
|
||||
style="stop-color:#ff2600;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3604" />
|
||||
<stop
|
||||
style="stop-color:#ff5f00;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3606" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective2824" />
|
||||
<inkscape:perspective
|
||||
id="perspective3618"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3602-7"
|
||||
id="linearGradient3608-5"
|
||||
x1="3.909091"
|
||||
y1="14.363636"
|
||||
x2="24.81818"
|
||||
y2="14.363636"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3602-7">
|
||||
<stop
|
||||
style="stop-color:#c51900;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3604-1" />
|
||||
<stop
|
||||
style="stop-color:#ff5f00;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3606-3" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
id="perspective3677"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3602-5"
|
||||
id="linearGradient3608-1"
|
||||
x1="3.909091"
|
||||
y1="14.363636"
|
||||
x2="24.81818"
|
||||
y2="14.363636"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3602-5">
|
||||
<stop
|
||||
style="stop-color:#c51900;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3604-9" />
|
||||
<stop
|
||||
style="stop-color:#ff5f00;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3606-9" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="14.363636"
|
||||
x2="24.81818"
|
||||
y1="14.363636"
|
||||
x1="3.909091"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient3686"
|
||||
xlink:href="#linearGradient3602-5"
|
||||
inkscape:collect="always" />
|
||||
<inkscape:perspective
|
||||
id="perspective3717"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3602-58"
|
||||
id="linearGradient3608-8"
|
||||
x1="3.909091"
|
||||
y1="14.363636"
|
||||
x2="24.81818"
|
||||
y2="14.363636"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3602-58">
|
||||
<stop
|
||||
style="stop-color:#c51900;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3604-2" />
|
||||
<stop
|
||||
style="stop-color:#ff5f00;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3606-2" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="14.363636"
|
||||
x2="24.81818"
|
||||
y1="14.363636"
|
||||
x1="3.909091"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient3726"
|
||||
xlink:href="#linearGradient3602-58"
|
||||
inkscape:collect="always" />
|
||||
<inkscape:perspective
|
||||
id="perspective4410"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective4944"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective4966"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective5009"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective5165"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective7581"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective7606"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective7638"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective7660"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective7704"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective7730"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective7762"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective7783"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective7843"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective7881"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective7932"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2866"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2878"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
id="linearGradient3602-1">
|
||||
<stop
|
||||
style="stop-color:#ff2600;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3604-8" />
|
||||
<stop
|
||||
style="stop-color:#ff5f00;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3606-96" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3602-1"
|
||||
id="linearGradient2875"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="3.909091"
|
||||
y1="14.363636"
|
||||
x2="24.81818"
|
||||
y2="14.363636" />
|
||||
<inkscape:perspective
|
||||
id="perspective2885"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
id="linearGradient3602-1-5">
|
||||
<stop
|
||||
style="stop-color:#ff2600;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3604-8-3" />
|
||||
<stop
|
||||
style="stop-color:#ff5f00;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3606-96-8" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
id="perspective3720"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
id="linearGradient3602-1-8">
|
||||
<stop
|
||||
style="stop-color:#ff2600;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3604-8-5" />
|
||||
<stop
|
||||
style="stop-color:#ff5f00;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3606-96-2" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
id="perspective3822"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3849"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3879"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2896"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2925"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective2925-4"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3726"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="6.3984375"
|
||||
inkscape:cx="5.6876106"
|
||||
inkscape:cy="16.324207"
|
||||
inkscape:current-layer="text3796"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="993"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="28"
|
||||
inkscape:window-maximized="1">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3208"
|
||||
empspacing="2"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata2821">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>[wmayer]</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:title>Sketcher_ConstrainLock</dc:title>
|
||||
<dc:date>2011-10-10</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_ConstrainLock.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
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
transform="scale(0.73872768,1.3536788)"
|
||||
style="font-size:54.21519089000000236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ff2600;fill-opacity:1;stroke:#731200;font-family:Arial;-inkscape-font-specification:Arial;color:#000000;fill-rule:nonzero;stroke-width:2.19132471;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="text3796">
|
||||
<g
|
||||
id="g4699"
|
||||
transform="matrix(1.2685713,0,0,1.2710284,-11.229264,-3.3148656)">
|
||||
<path
|
||||
sodipodi:open="true"
|
||||
d="M 69.037672,20.71525 A 27.750441,15.544155 0 0 1 41.301012,36.259403 27.750441,15.544155 0 0 1 13.536805,20.730688 27.750441,15.544155 0 0 1 41.245891,5.1711121 27.750441,15.544155 0 0 1 69.037617,20.684375"
|
||||
sodipodi:end="6.281199"
|
||||
sodipodi:start="0"
|
||||
sodipodi:ry="15.544155"
|
||||
sodipodi:rx="27.750441"
|
||||
sodipodi:cy="20.71525"
|
||||
sodipodi:cx="41.287231"
|
||||
sodipodi:type="arc"
|
||||
id="path4594-5"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#bfbfbf;stroke-width:3.03046966;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||
<path
|
||||
sodipodi:open="true"
|
||||
d="M 70.391352,21.453978 A 27.750441,15.544155 0 0 1 42.654691,36.998131 27.750441,15.544155 0 0 1 14.890484,21.469415 27.750441,15.544155 0 0 1 42.59957,5.9098397 27.750441,15.544155 0 0 1 70.391297,21.423102"
|
||||
sodipodi:end="6.281199"
|
||||
sodipodi:start="0"
|
||||
sodipodi:ry="15.544155"
|
||||
sodipodi:rx="27.750441"
|
||||
sodipodi:cy="21.453978"
|
||||
sodipodi:cx="42.640911"
|
||||
sodipodi:type="arc"
|
||||
id="path4594-7"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;fill:#cc0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.03046966;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||
<path
|
||||
sodipodi:open="true"
|
||||
d="M 70.391354,21.453978 A 27.750443,15.544157 0 0 1 42.654691,36.998133 27.750443,15.544157 0 0 1 14.890482,21.469415 27.750443,15.544157 0 0 1 42.59957,5.9098378 27.750443,15.544157 0 0 1 70.391299,21.423102"
|
||||
sodipodi:end="6.281199"
|
||||
sodipodi:start="0"
|
||||
sodipodi:ry="15.544157"
|
||||
sodipodi:rx="27.750443"
|
||||
sodipodi:cy="21.453978"
|
||||
sodipodi:cx="42.640911"
|
||||
sodipodi:type="arc"
|
||||
id="path4594"
|
||||
style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:3.03046966;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:open="true"
|
||||
d="M 56.450161,28.87093 A 19.893389,10.383315 0 0 1 30.622189,30.130692 19.893389,10.383315 0 0 1 24.366219,16.990736"
|
||||
sodipodi:end="3.6082287"
|
||||
sodipodi:start="0.76741539"
|
||||
sodipodi:ry="10.383315"
|
||||
sodipodi:rx="19.893389"
|
||||
sodipodi:cy="21.662029"
|
||||
sodipodi:cx="42.13274"
|
||||
sodipodi:type="arc"
|
||||
id="path4594-3-5"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.09707427;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||
<path
|
||||
transform="scale(-1)"
|
||||
sodipodi:open="true"
|
||||
d="m -28.059505,-14.232113 a 19.893389,10.383315 0 0 1 -25.806816,1.348108 19.893389,10.383315 0 0 1 -6.428073,-13.114745"
|
||||
sodipodi:end="3.601182"
|
||||
sodipodi:start="0.76099921"
|
||||
sodipodi:ry="10.383315"
|
||||
sodipodi:rx="19.893389"
|
||||
sodipodi:cy="-21.392918"
|
||||
sodipodi:cx="-42.465248"
|
||||
sodipodi:type="arc"
|
||||
id="path4594-3-5-3"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.09707427;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4670"
|
||||
d="m 28.427255,14.035826 32.488291,12.55837 v 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4672"
|
||||
d="M 24.366218,16.252009 55.500831,28.81038 v 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4674"
|
||||
d="M 23.01254,14.035826 60.915546,28.81038"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="svg2816" height="64px" width="64px">
|
||||
<g id="pale-red" style="fill:none;stroke:#280000;stroke-width:8;" >
|
||||
<path d="M 16,48 48,16" />
|
||||
<circle r="26" cy="32" cx="32" />
|
||||
</g>
|
||||
<g id="red" style="fill:none;stroke:#cc0000;stroke-width:4;">
|
||||
<circle r="26" cy="32" cx="32" />
|
||||
<path d="M 14,50 50,14" />
|
||||
</g>
|
||||
<g id="dark" style="fill:none;stroke:#ef2929;stroke-width:1.99999988;">
|
||||
<circle r="27" cy="32" cx="32" />
|
||||
<path d="M 12,50 50,12" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 608 B |
161
src/Mod/Sketcher/Gui/Resources/icons/Sketcher_Crosshair.svg
Normal file
@@ -0,0 +1,161 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
version="1.1"
|
||||
id="svg4564"
|
||||
height="64"
|
||||
width="64">
|
||||
<defs
|
||||
id="defs4566">
|
||||
<radialGradient
|
||||
r="34.345188"
|
||||
fy="672.79736"
|
||||
fx="225.26402"
|
||||
cy="672.79736"
|
||||
cx="225.26402"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient4572"
|
||||
xlink:href="#linearGradient3144-3" />
|
||||
<linearGradient
|
||||
id="linearGradient3144-3">
|
||||
<stop
|
||||
id="stop3146-7"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3148-0"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="34.345188"
|
||||
fy="672.79736"
|
||||
fx="225.26402"
|
||||
cy="672.79736"
|
||||
cx="225.26402"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient4574"
|
||||
xlink:href="#linearGradient3144-0" />
|
||||
<linearGradient
|
||||
id="linearGradient3144-0">
|
||||
<stop
|
||||
id="stop3146-2"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3148-9"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="34.345188"
|
||||
fy="672.79736"
|
||||
fx="225.26402"
|
||||
cy="672.79736"
|
||||
cx="225.26402"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3846"
|
||||
xlink:href="#linearGradient3144-3" />
|
||||
<radialGradient
|
||||
r="34.345188"
|
||||
fy="672.79736"
|
||||
fx="225.26402"
|
||||
cy="672.79736"
|
||||
cx="225.26402"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3848"
|
||||
xlink:href="#linearGradient3144-0" />
|
||||
<linearGradient
|
||||
id="linearGradient3836-0-6-4">
|
||||
<stop
|
||||
id="stop3838-2-7-0"
|
||||
offset="0"
|
||||
style="stop-color:#a40000;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop3840-5-5-9"
|
||||
offset="1"
|
||||
style="stop-color:#ef2929;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3836-0-6">
|
||||
<stop
|
||||
id="stop3838-2-7"
|
||||
offset="0"
|
||||
style="stop-color:#a40000;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop3840-5-5"
|
||||
offset="1"
|
||||
style="stop-color:#ef2929;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</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:title></dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>[bitacovir]</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:title>Sketcher_Crosshair</dc:title>
|
||||
<dc:date />
|
||||
<dc:relation />
|
||||
<dc:publisher>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<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 />
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
<dc:subject>
|
||||
<rdf:Bag />
|
||||
</dc:subject>
|
||||
<dc:description />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(0,-988.36218)"
|
||||
id="layer1">
|
||||
<path
|
||||
id="path913"
|
||||
d="m 16.001457,991.61563 v 8.76197"
|
||||
style="fill:#ffffff;stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:#ffffff;stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 16.005154,1008.394 v 8.7619"
|
||||
id="path913-6" />
|
||||
<path
|
||||
id="path913-6-4"
|
||||
d="M 3.2625654,1004.386 H 11.992377"
|
||||
style="fill:#ffffff;stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:#ffffff;stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 19.969916,1004.3436 H 28.72376"
|
||||
id="path913-6-4-4" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
@@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
id="svg12"
|
||||
width="64"
|
||||
height="64"
|
||||
version="1.1">
|
||||
<metadata
|
||||
id="metadata18">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs16" />
|
||||
<g
|
||||
transform="translate(-6.1362487,-5.2733382)"
|
||||
style="fill:none;stroke:#cc0000;stroke-width:2"
|
||||
id="symbol">
|
||||
<rect
|
||||
y="46.262405"
|
||||
x="17.2582"
|
||||
height="18.312866"
|
||||
width="20.87805"
|
||||
id="rect6073"
|
||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<rect
|
||||
y="39.273338"
|
||||
x="25.2582"
|
||||
height="18.312866"
|
||||
width="20.87805"
|
||||
id="rect6073-6"
|
||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#cc0000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path6092"
|
||||
d="m 17.2582,46.262405 8,-6.989067"
|
||||
style="fill:none;stroke:#cc0000;stroke-width:2.828;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path6096"
|
||||
d="m 38.13625,46.262405 7.999999,-6.989067"
|
||||
style="fill:none;stroke:#cc0000;stroke-width:2.828;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path6098"
|
||||
d="m 38.13625,64.575271 8,-6.989067"
|
||||
style="fill:none;stroke:#cc0000;stroke-width:2.828;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path6100"
|
||||
d="m 17.2582,64.575271 8,-6.989067"
|
||||
style="fill:none;stroke:#cc0000;stroke-width:2.828;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;"
|
||||
id="crosshair">
|
||||
<path
|
||||
id="path9"
|
||||
d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;">
|
||||
<path d="m41,7c14,24-10,48-34,34" />
|
||||
<circle cx="41" cy="7" r="5" />
|
||||
<circle cx="7" cy="41" r="5" />
|
||||
<circle cx="38" cy="38" r="5" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#eeeeec;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 537 B |
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;">
|
||||
<path d="m41,7c14,24-10,48-34,34" />
|
||||
<circle cx="41" cy="7" r="5" />
|
||||
<circle cx="7" cy="41" r="5" />
|
||||
<circle cx="38" cy="38" r="5" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 537 B |
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;">
|
||||
<path d="m41,7c14,24-10,48-34,34" />
|
||||
<circle cx="41" cy="7" r="5" />
|
||||
<circle cx="7" cy="41" r="5" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 499 B |
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;">
|
||||
<path d="m55,10c-50,40-45,60-5,45" />
|
||||
<circle cx="49" cy="36" r="3" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
After Width: | Height: | Size: 465 B |
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;">
|
||||
<path d="m55,10c-50,40-45,60-5,45" />
|
||||
<circle cx="10" cy="36" r="3" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
After Width: | Height: | Size: 465 B |
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;">
|
||||
<path d="m55,10c-50,40-45,60-5,45" />
|
||||
<circle cx="49" cy="36" r="3" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
After Width: | Height: | Size: 465 B |
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;">
|
||||
<path d="m16,45 l8,8l16-30l10,20" />
|
||||
<path d="m10,35c5,10 10,10 20,10c10,0 10-20 20-20c10,0 10,10 20,10" stroke="#dddddd"/>
|
||||
<circle cx="24" cy="53" r="3" />
|
||||
<circle cx="40" cy="23" r="3" />
|
||||
<circle cx="50" cy="43" r="3" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
After Width: | Height: | Size: 632 B |
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;">
|
||||
<rect x="20" y="32" width="38" height="25" />
|
||||
<circle cx="20" cy="57" r="5" />
|
||||
<circle cx="58" cy="32" r="5" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 553 B |
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;">
|
||||
<circle cx="40" cy="40" r="18" />
|
||||
<circle cx="40" cy="40" r="4" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
After Width: | Height: | Size: 461 B |
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;" transform="rotate(-20 41 45)">
|
||||
<ellipse cx="41" cy="45" rx="20" ry="10" />
|
||||
<circle cx="41" cy="45" r="4" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 500 B |
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;">
|
||||
<path d="m22,29v15l11,11h15" />
|
||||
<circle cx="39" cy="36" r="4" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 458 B |
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;">
|
||||
<line x1="20" y1="57" x2="50" y2="28" />
|
||||
<circle cx="20" cy="57" r="5" />
|
||||
<circle cx="50" cy="28" r="5" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 548 B |
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;">
|
||||
<path d="m16,45 l8,8l16-30l10,20" />
|
||||
<circle cx="24" cy="53" r="4" />
|
||||
<circle cx="40" cy="23" r="4" />
|
||||
<circle cx="50" cy="43" r="4" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
After Width: | Height: | Size: 540 B |
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:#cc0000;stroke:none;">
|
||||
<circle cx="32" cy="32" r="6" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 406 B |
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;">
|
||||
<path d="m19,53l30,-30" stroke-dasharray="3 2" />
|
||||
<path d="m44,23h5v5z" />
|
||||
<circle cx="19" cy="53" r="3" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 506 B |
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
id="svg12"
|
||||
width="64"
|
||||
height="64"
|
||||
version="1.1">
|
||||
<metadata
|
||||
id="metadata18">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs16" />
|
||||
<g
|
||||
transform="translate(-6.1362487,-5.2733382)"
|
||||
style="fill:none;stroke:#cc0000;stroke-width:2"
|
||||
id="symbol">
|
||||
<path
|
||||
id="path6153"
|
||||
d="m 13.327165,47.273338 v 20"
|
||||
style="fill:none;stroke:#d60000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path6155"
|
||||
d="m 38.136249,47.273338 v 20"
|
||||
style="fill:none;stroke:#d60000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path6157"
|
||||
d="m 46.136249,39.273338 v 22"
|
||||
style="fill:none;stroke:#d60000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path6159"
|
||||
d="m 13.327165,67.273338 v -20 h 24.809084 v 20 0 l 0,-20 8,-8 v 22"
|
||||
style="fill:none;stroke:#d60000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
id="path6161"
|
||||
d="m 13.327165,47.273338 9.49201,-8 h 23.317074 v 0"
|
||||
style="fill:none;stroke:#d60000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;"
|
||||
id="crosshair">
|
||||
<path
|
||||
id="path9"
|
||||
d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
id="svg12"
|
||||
width="64"
|
||||
height="64"
|
||||
version="1.1">
|
||||
<metadata
|
||||
id="metadata18">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs16" />
|
||||
<g
|
||||
transform="translate(-6.1362487,-5.2733382)"
|
||||
style="fill:none;stroke:#cc0000;stroke-width:2"
|
||||
id="symbol">
|
||||
<circle
|
||||
r="3.5762713"
|
||||
cx="46.13625"
|
||||
cy="53.273338"
|
||||
style="stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="circle4" />
|
||||
<path
|
||||
d="M 60.770398,53.273338 53.453324,65.946883 H 38.819175 l -7.317074,-12.673545 7.317074,-12.673544 14.634149,0 z"
|
||||
id="path4533"
|
||||
style="stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;fill-rule:evenodd" />
|
||||
<circle
|
||||
r="3.5762713"
|
||||
cx="53.453323"
|
||||
cy="40.599792"
|
||||
style="fill:none;stroke:#cc0000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;fill-rule:evenodd;fill-opacity:1;opacity:1"
|
||||
id="circle4-3" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;"
|
||||
id="crosshair">
|
||||
<path
|
||||
id="path9"
|
||||
d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="64" height="64">
|
||||
<g style="fill:none;stroke:#cc0000;stroke-width:2" >
|
||||
<path d="m45,35c14,0 14,20 0,20h-20c-14,0-14-20 0-20z" />
|
||||
<circle cx="25" cy="45" r="3"/>
|
||||
</g>
|
||||
<g style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter">
|
||||
<path d="m 16,3 v 9 m 0,8 v 9 M 3,16 h 9 m 8,0 h 9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 466 B |
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="64" >
|
||||
<g id="symbol" style="fill:none;stroke:#cc0000;stroke-width:2;">
|
||||
<path d="m40,40l-17-15m17,15l-17,15m17-15l17,15" stroke-dasharray="2 2" />
|
||||
<path d="m40,40l20-18" stroke-dasharray="4 2"/>
|
||||
<circle cx="40" cy="40" r="3" />
|
||||
</g>
|
||||
<g id="crosshair" style="stroke:#ffffff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;">
|
||||
<path d="m16,3v9m0,8v9m-13-13h9m8,0h9" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 554 B |