diff --git a/src/Gui/Application.h b/src/Gui/Application.h
index eb1113dcf6..ce0b086be1 100644
--- a/src/Gui/Application.h
+++ b/src/Gui/Application.h
@@ -246,6 +246,8 @@ public:
PYFUNCDEF_S(sCreateViewer);
+ PYFUNCDEF_S(sGetMarkerIndex);
+
static PyMethodDef Methods[];
private:
diff --git a/src/Gui/ApplicationPy.cpp b/src/Gui/ApplicationPy.cpp
index 884bc5fa85..105255b547 100644
--- a/src/Gui/ApplicationPy.cpp
+++ b/src/Gui/ApplicationPy.cpp
@@ -63,6 +63,7 @@
#include
#include
#include
+#include
using namespace Gui;
@@ -182,6 +183,9 @@ PyMethodDef Application::Methods[] = {
"createViewer([int]) -> View3DInventor/SplitView3DInventor\n\n"
"shows and returns a viewer. If the integer argument is given and > 1: -> splitViewer"},
+ {"getMarkerIndex", (PyCFunction) Application::sGetMarkerIndex, 1,
+ "Get marker index according to marker size setting"},
+
{NULL, NULL, 0, NULL} /* Sentinel */
};
@@ -1224,3 +1228,27 @@ PyObject* Application::sCreateViewer(PyObject * /*self*/, PyObject *args,PyObjec
}
return Py_None;
}
+
+PyObject* Application::sGetMarkerIndex(PyObject * /*self*/, PyObject *args, PyObject * /*kwd*/)
+{
+ char *pstr=0;
+ if (!PyArg_ParseTuple(args, "s", &pstr))
+ return NULL;
+
+ PY_TRY {
+ ParameterGrp::handle const hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View");
+
+ if (strcmp(pstr, "square") == 0)
+ return Py_BuildValue("i", Gui::Inventor::MarkerBitmaps::getMarkerIndex("DIAMOND_FILLED", hGrp->GetInt("MarkerSize", 9)));
+ else if (strcmp(pstr, "cross") == 0)
+ return Py_BuildValue("i", Gui::Inventor::MarkerBitmaps::getMarkerIndex("CROSS", hGrp->GetInt("MarkerSize", 9)));
+ else if (strcmp(pstr, "empty") == 0)
+ return Py_BuildValue("i", Gui::Inventor::MarkerBitmaps::getMarkerIndex("SQUARE_LINE", hGrp->GetInt("MarkerSize", 9)));
+ else if (strcmp(pstr, "quad") == 0)
+ return Py_BuildValue("i", Gui::Inventor::MarkerBitmaps::getMarkerIndex("SQUARE_FILLED", hGrp->GetInt("MarkerSize", 9)));
+ else if (strcmp(pstr, "circle") == 0)
+ return Py_BuildValue("i", Gui::Inventor::MarkerBitmaps::getMarkerIndex("CIRCLE_LINE", hGrp->GetInt("MarkerSize", 9)));
+ else
+ return Py_BuildValue("i", Gui::Inventor::MarkerBitmaps::getMarkerIndex("CIRCLE_FILLED", hGrp->GetInt("MarkerSize", 9)));
+ }PY_CATCH;
+}
diff --git a/src/Gui/DlgSettings3DView.ui b/src/Gui/DlgSettings3DView.ui
index 127c948b0e..11fbe268f9 100644
--- a/src/Gui/DlgSettings3DView.ui
+++ b/src/Gui/DlgSettings3DView.ui
@@ -323,6 +323,26 @@
+ -
+
+
+ 6
+
+
+ 0
+
+
-
+
+
+ Marker size:
+
+
+
+ -
+
+
+
+
-
diff --git a/src/Gui/DlgSettings3DViewImp.cpp b/src/Gui/DlgSettings3DViewImp.cpp
index e1b638cc65..f6811e4ddb 100644
--- a/src/Gui/DlgSettings3DViewImp.cpp
+++ b/src/Gui/DlgSettings3DViewImp.cpp
@@ -83,6 +83,9 @@ void DlgSettings3DViewImp::saveSettings()
index = this->naviCubeCorner->currentIndex();
hGrp->SetInt("CornerNaviCube", index);
+ QVariant const &vBoxMarkerSize = this->boxMarkerSize->itemData(this->boxMarkerSize->currentIndex());
+ hGrp->SetInt("MarkerSize", vBoxMarkerSize.toInt());
+
checkBoxZoomAtCursor->onSave();
checkBoxInvertZoom->onSave();
spinBoxZoomStep->onSave();
@@ -135,6 +138,17 @@ void DlgSettings3DViewImp::loadSettings()
index = hGrp->GetInt("CornerNaviCube", 1);
naviCubeCorner->setCurrentIndex(index);
+
+ int const current = hGrp->GetInt("MarkerSize", 9L);
+ this->boxMarkerSize->addItem(tr("5px"), QVariant(5));
+ this->boxMarkerSize->addItem(tr("7px"), QVariant(7));
+ this->boxMarkerSize->addItem(tr("9px"), QVariant(9));
+ this->boxMarkerSize->addItem(tr("11px"), QVariant(11));
+ this->boxMarkerSize->addItem(tr("13px"), QVariant(13));
+ this->boxMarkerSize->addItem(tr("15px"), QVariant(15));
+ index = this->boxMarkerSize->findData(QVariant(current));
+ if (index < 0) index = 2;
+ this->boxMarkerSize->setCurrentIndex(index);
}
void DlgSettings3DViewImp::on_mouseButton_clicked()
diff --git a/src/Gui/Inventor/MarkerBitmaps.cpp b/src/Gui/Inventor/MarkerBitmaps.cpp
index 85b0cb91fb..4038faa774 100644
--- a/src/Gui/Inventor/MarkerBitmaps.cpp
+++ b/src/Gui/Inventor/MarkerBitmaps.cpp
@@ -58,10 +58,290 @@ def makeIcon(s):
print (ba.data())
*/
+//DIAMOND_FILLED_11_11
+const int DIAMOND_FILLED11_WIDTH = 11;
+const int DIAMOND_FILLED11_HEIGHT = 11;
+const char diamondFilled11_marker[DIAMOND_FILLED11_WIDTH * DIAMOND_FILLED11_HEIGHT + 1] = {
+" "
+" xx "
+" xxxx "
+" xxxxxx "
+" xxxxxxxx "
+" xxxxxxxxxx"
+" xxxxxxxxxx"
+" xxxxxxxx "
+" xxxxxx "
+" xxxx "
+" xx "};
+
+
+//DIAMOND_FILLED_13_13
+const int DIAMOND_FILLED13_WIDTH = 13;
+const int DIAMOND_FILLED13_HEIGHT = 13;
+const char diamondFilled13_marker[DIAMOND_FILLED13_WIDTH * DIAMOND_FILLED13_HEIGHT + 1] = {
+" "
+" xx "
+" xxxx "
+" xxxxxx "
+" xxxxxxxx "
+" xxxxxxxxxx "
+" xxxxxxxxxxxx"
+" xxxxxxxxxxxx"
+" xxxxxxxxxx "
+" xxxxxxxx "
+" xxxxxx "
+" xxxx "
+" xx "};
+
+
+//DIAMOND_FILLED_15_15
+const int DIAMOND_FILLED15_WIDTH = 15;
+const int DIAMOND_FILLED15_HEIGHT = 15;
+const char diamondFilled15_marker[DIAMOND_FILLED15_WIDTH * DIAMOND_FILLED15_HEIGHT + 1] = {
+" "
+" xx "
+" xxxx "
+" xxxxxx "
+" xxxxxxxx "
+" xxxxxxxxxx "
+" xxxxxxxxxxxx "
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxx "
+" xxxxxxxxxx "
+" xxxxxxxx "
+" xxxxxx "
+" xxxx "
+" xx "};
+
+//CROSS_11_11
+const int CROSS11_WIDTH = 11;
+const int CROSS11_HEIGHT = 11;
+const char cross11_marker[CROSS11_WIDTH * CROSS11_HEIGHT + 1] = {
+" "
+" xx xx"
+" xx xx "
+" xx xx "
+" xxxx "
+" xx "
+" xx "
+" xxxx "
+" xx xx "
+" xx xx "
+" xx xx"};
+
+
+//CROSS_13_13
+const int CROSS13_WIDTH = 13;
+const int CROSS13_HEIGHT = 13;
+const char cross13_marker[CROSS13_WIDTH * CROSS13_HEIGHT + 1] = {
+" "
+" xx xx"
+" xx xx "
+" xx xx "
+" xx xx "
+" xxxx "
+" xx "
+" xx "
+" xxxx "
+" xx xx "
+" xx xx "
+" xx xx "
+" xx xx"};
+
+
+//CROSS_15_15
+const int CROSS15_WIDTH = 15;
+const int CROSS15_HEIGHT = 15;
+const char cross15_marker[CROSS15_WIDTH * CROSS15_HEIGHT + 1] = {
+" "
+" xx xx"
+" xx xx "
+" xx xx "
+" xx xx "
+" xx xx "
+" xxxx "
+" xx "
+" xx "
+" xxxx "
+" xx xx "
+" xx xx "
+" xx xx "
+" xx xx "
+" xx xx"};
+
+//SQUARE_LINE_11_11
+const int SQUARE_LINE11_WIDTH = 11;
+const int SQUARE_LINE11_HEIGHT = 11;
+const char squareLine11_marker[SQUARE_LINE11_WIDTH * SQUARE_LINE11_HEIGHT + 1] = {
+" "
+" xxxxxxxxxx"
+" xxxxxxxxxx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xxxxxxxxxx"
+" xxxxxxxxxx"};
+
+
+//SQUARE_LINE_13_13
+const int SQUARE_LINE13_WIDTH = 13;
+const int SQUARE_LINE13_HEIGHT = 13;
+const char squareLine13_marker[SQUARE_LINE13_WIDTH * SQUARE_LINE13_HEIGHT + 1] = {
+" "
+" xxxxxxxxxxxx"
+" xxxxxxxxxxxx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xxxxxxxxxxxx"
+" xxxxxxxxxxxx"};
+
+
+//SQUARE_LINE_15_15
+const int SQUARE_LINE15_WIDTH = 15;
+const int SQUARE_LINE15_HEIGHT = 15;
+const char squareLine15_marker[SQUARE_LINE15_WIDTH * SQUARE_LINE15_HEIGHT + 1] = {
+" "
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"};
+
+//SQUARE_FILLED_11_11
+const int SQUARE_FILLED11_WIDTH = 11;
+const int SQUARE_FILLED11_HEIGHT = 11;
+const char squareFilled11_marker[SQUARE_FILLED11_WIDTH * SQUARE_FILLED11_HEIGHT + 1] = {
+" "
+" xxxxxxxxxx"
+" xxxxxxxxxx"
+" xxxxxxxxxx"
+" xxxxxxxxxx"
+" xxxxxxxxxx"
+" xxxxxxxxxx"
+" xxxxxxxxxx"
+" xxxxxxxxxx"
+" xxxxxxxxxx"
+" xxxxxxxxxx"};
+
+
+//SQUARE_FILLED_13_13
+const int SQUARE_FILLED13_WIDTH = 13;
+const int SQUARE_FILLED13_HEIGHT = 13;
+const char squareFilled13_marker[SQUARE_FILLED13_WIDTH * SQUARE_FILLED13_HEIGHT + 1] = {
+" "
+" xxxxxxxxxxxx"
+" xxxxxxxxxxxx"
+" xxxxxxxxxxxx"
+" xxxxxxxxxxxx"
+" xxxxxxxxxxxx"
+" xxxxxxxxxxxx"
+" xxxxxxxxxxxx"
+" xxxxxxxxxxxx"
+" xxxxxxxxxxxx"
+" xxxxxxxxxxxx"
+" xxxxxxxxxxxx"
+" xxxxxxxxxxxx"};
+
+
+//SQUARE_FILLED_15_15
+const int SQUARE_FILLED15_WIDTH = 15;
+const int SQUARE_FILLED15_HEIGHT = 15;
+const char squareFilled15_marker[SQUARE_FILLED15_WIDTH * SQUARE_FILLED15_HEIGHT + 1] = {
+" "
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"
+" xxxxxxxxxxxxxx"};
+
+//CIRCLE_LINE_11_11
+const int CIRCLE_LINE11_WIDTH = 11;
+const int CIRCLE_LINE11_HEIGHT = 11;
+const char circleLine11_marker[CIRCLE_LINE11_WIDTH * CIRCLE_LINE11_HEIGHT + 1] = {
+" "
+" xxxxxx "
+" xxxxxxxx "
+" xx xx "
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx "
+" xxxxxxxx "
+" xxxxxx "};
+
+
+//CIRCLE_LINE_13_13
+const int CIRCLE_LINE13_WIDTH = 13;
+const int CIRCLE_LINE13_HEIGHT = 13;
+const char circleLine13_marker[CIRCLE_LINE13_WIDTH * CIRCLE_LINE13_HEIGHT + 1] = {
+" "
+" xxxxxx "
+" xxxxxxxx "
+" xx xx "
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx "
+" xxxxxxxx "
+" xxxxxx "};
+
+
+//CIRCLE_LINE_15_15
+const int CIRCLE_LINE15_WIDTH = 15;
+const int CIRCLE_LINE15_HEIGHT = 15;
+const char circleLine15_marker[CIRCLE_LINE15_WIDTH * CIRCLE_LINE15_HEIGHT + 1] = {
+" "
+" xxxxxx "
+" xxxxxxxxxx "
+" xx xx "
+" xx xx "
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx"
+" xx xx "
+" xx xxxx"
+" xxxxxxxxxx "
+" xxxxxx "};
+
//CIRCLE_FILLED_11_11
-const int CIRCLE11_WIDTH = 11;
-const int CIRCLE11_HEIGHT = 11;
-const char circle11_marker[CIRCLE11_WIDTH * CIRCLE11_HEIGHT + 1] = {
+const int CIRCLE_FILLED11_WIDTH = 11;
+const int CIRCLE_FILLED11_HEIGHT = 11;
+const char circleFilled11_marker[CIRCLE_FILLED11_WIDTH * CIRCLE_FILLED11_HEIGHT + 1] = {
" "
" xxxxxx "
" xxxxxxxx "
@@ -76,9 +356,9 @@ const char circle11_marker[CIRCLE11_WIDTH * CIRCLE11_HEIGHT + 1] = {
//CIRCLE_FILLED_13_13
-const int CIRCLE13_WIDTH = 13;
-const int CIRCLE13_HEIGHT = 13;
-const char circle13_marker[CIRCLE13_WIDTH * CIRCLE13_HEIGHT + 1] = {
+const int CIRCLE_FILLED13_WIDTH = 13;
+const int CIRCLE_FILLED13_HEIGHT = 13;
+const char circleFilled13_marker[CIRCLE_FILLED13_WIDTH * CIRCLE_FILLED13_HEIGHT + 1] = {
" "
" xxxxxx "
" xxxxxxxx "
@@ -95,9 +375,9 @@ const char circle13_marker[CIRCLE13_WIDTH * CIRCLE13_HEIGHT + 1] = {
//CIRCLE_FILLED_15_15
-const int CIRCLE15_WIDTH = 15;
-const int CIRCLE15_HEIGHT = 15;
-const char circle15_marker[CIRCLE15_WIDTH * CIRCLE15_HEIGHT + 1] = {
+const int CIRCLE_FILLED15_WIDTH = 15;
+const int CIRCLE_FILLED15_HEIGHT = 15;
+const char circleFilled15_marker[CIRCLE_FILLED15_WIDTH * CIRCLE_FILLED15_HEIGHT + 1] = {
" "
" xxxxxx "
" xxxxxxxxxx "
@@ -119,9 +399,54 @@ std::map MarkerBitmaps::markerIndex;
void
MarkerBitmaps::initClass()
{
- createBitmap("CIRCLE_FILLED", 11, 11, 11, circle11_marker);
- createBitmap("CIRCLE_FILLED", 13, 13, 13, circle13_marker);
- createBitmap("CIRCLE_FILLED", 15, 15, 15, circle15_marker);
+ createBitmap("DIAMOND_FILLED", 11, 11, 11, diamondFilled11_marker);
+ createBitmap("DIAMOND_FILLED", 13, 13, 13, diamondFilled13_marker);
+ createBitmap("DIAMOND_FILLED", 15, 15, 15, diamondFilled15_marker);
+
+ // the built-in bitmaps of Coin
+ markerIndex [std::make_pair("DIAMOND_FILLED", 9)] = SoMarkerSet::DIAMOND_FILLED_9_9;
+ markerIndex [std::make_pair("DIAMOND_FILLED", 7)] = SoMarkerSet::DIAMOND_FILLED_7_7;
+ markerIndex [std::make_pair("DIAMOND_FILLED", 5)] = SoMarkerSet::DIAMOND_FILLED_5_5;
+
+ createBitmap("CROSS", 11, 11, 11, cross11_marker);
+ createBitmap("CROSS", 13, 13, 13, cross13_marker);
+ createBitmap("CROSS", 15, 15, 15, cross15_marker);
+
+ // the built-in bitmaps of Coin
+ markerIndex [std::make_pair("CROSS", 9)] = SoMarkerSet::CROSS_9_9;
+ markerIndex [std::make_pair("CROSS", 7)] = SoMarkerSet::CROSS_7_7;
+ markerIndex [std::make_pair("CROSS", 5)] = SoMarkerSet::CROSS_5_5;
+
+ createBitmap("SQUARE_LINE", 11, 11, 11, squareLine11_marker);
+ createBitmap("SQUARE_LINE", 13, 13, 13, squareLine13_marker);
+ createBitmap("SQUARE_LINE", 15, 15, 15, squareLine15_marker);
+
+ // the built-in bitmaps of Coin
+ markerIndex [std::make_pair("SQUARE_LINE", 9)] = SoMarkerSet::SQUARE_LINE_9_9;
+ markerIndex [std::make_pair("SQUARE_LINE", 7)] = SoMarkerSet::SQUARE_LINE_7_7;
+ markerIndex [std::make_pair("SQUARE_LINE", 5)] = SoMarkerSet::SQUARE_LINE_5_5;
+
+ createBitmap("SQUARE_FILLED", 11, 11, 11, squareFilled11_marker);
+ createBitmap("SQUARE_FILLED", 13, 13, 13, squareFilled13_marker);
+ createBitmap("SQUARE_FILLED", 15, 15, 15, squareFilled15_marker);
+
+ // the built-in bitmaps of Coin
+ markerIndex [std::make_pair("SQUARE_FILLED", 9)] = SoMarkerSet::SQUARE_FILLED_9_9;
+ markerIndex [std::make_pair("SQUARE_FILLED", 7)] = SoMarkerSet::SQUARE_FILLED_7_7;
+ markerIndex [std::make_pair("SQUARE_FILLED", 5)] = SoMarkerSet::SQUARE_FILLED_5_5;
+
+ createBitmap("CIRCLE_LINE", 11, 11, 11, circleLine11_marker);
+ createBitmap("CIRCLE_LINE", 13, 13, 13, circleLine13_marker);
+ createBitmap("CIRCLE_LINE", 15, 15, 15, circleLine15_marker);
+
+ // the built-in bitmaps of Coin
+ markerIndex [std::make_pair("CIRCLE_LINE", 9)] = SoMarkerSet::CIRCLE_LINE_9_9;
+ markerIndex [std::make_pair("CIRCLE_LINE", 7)] = SoMarkerSet::CIRCLE_LINE_7_7;
+ markerIndex [std::make_pair("CIRCLE_LINE", 5)] = SoMarkerSet::CIRCLE_LINE_5_5;
+
+ createBitmap("CIRCLE_FILLED", 11, 11, 11, circleFilled11_marker);
+ createBitmap("CIRCLE_FILLED", 13, 13, 13, circleFilled13_marker);
+ createBitmap("CIRCLE_FILLED", 15, 15, 15, circleFilled15_marker);
// the built-in bitmaps of Coin
markerIndex [std::make_pair("CIRCLE_FILLED", 9)] = SoMarkerSet::CIRCLE_FILLED_9_9;
diff --git a/src/Mod/Draft/DraftTrackers.py b/src/Mod/Draft/DraftTrackers.py
index 17cbc8dcb9..4977fa9bb2 100644
--- a/src/Mod/Draft/DraftTrackers.py
+++ b/src/Mod/Draft/DraftTrackers.py
@@ -116,7 +116,7 @@ class snapTracker(Tracker):
color = coin.SoBaseColor()
color.rgb = FreeCADGui.draftToolBar.getDefaultColor("snap")
self.marker = coin.SoMarkerSet() # this is the marker symbol
- self.marker.markerIndex = coin.SoMarkerSet.CIRCLE_FILLED_9_9
+ self.marker.markerIndex = FreeCADGui.getMarkerIndex("")
self.coords = coin.SoCoordinate3() # this is the coordinate
self.coords.point.setValue((0,0,0))
node = coin.SoAnnotation()
@@ -126,18 +126,7 @@ class snapTracker(Tracker):
Tracker.__init__(self,children=[node],name="snapTracker")
def setMarker(self,style):
- if (style == "square"):
- self.marker.markerIndex = coin.SoMarkerSet.DIAMOND_FILLED_9_9
- elif (style == "circle"):
- self.marker.markerIndex = coin.SoMarkerSet.CIRCLE_LINE_9_9
- elif (style == "quad"):
- self.marker.markerIndex = coin.SoMarkerSet.SQUARE_FILLED_9_9
- elif (style == "empty"):
- self.marker.markerIndex = coin.SoMarkerSet.SQUARE_LINE_9_9
- elif (style == "cross"):
- self.marker.markerIndex = coin.SoMarkerSet.CROSS_9_9
- else:
- self.marker.markerIndex = coin.SoMarkerSet.CIRCLE_FILLED_9_9
+ self.marker.markerIndex = FreeCADGui.getMarkerIndex(style)
def setCoords(self,point):
self.coords.point.setValue((point.x,point.y,point.z))