diff --git a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp index 0614787f5d..3be9277de7 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp +++ b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp @@ -54,6 +54,8 @@ SketcherGeneralWidget::SketcherGeneralWidget(QWidget *parent) this, SLOT(setGridSize(double))); connect(ui->checkBoxAutoconstraints, SIGNAL(stateChanged(int)), this, SIGNAL(emitToggleAutoconstraints(int))); + connect(ui->renderingOrder->model(), SIGNAL(layoutChanged()), + this, SLOT(renderOrderChanged())); } SketcherGeneralWidget::~SketcherGeneralWidget() @@ -71,6 +73,8 @@ void SketcherGeneralWidget::saveSettings() hGrp->SetBool("GridSnap", ui->checkBoxGridSnap->isChecked()); hGrp->SetBool("AutoConstraints", ui->checkBoxAutoconstraints->isChecked()); + + //not necessary to save renderOrder, as it is already stored in renderOrderChanged on every change. } void SketcherGeneralWidget::loadSettings() @@ -82,6 +86,28 @@ void SketcherGeneralWidget::loadSettings() ui->gridSize->setToLastUsedValue(); ui->checkBoxGridSnap->setChecked(hGrp->GetBool("GridSnap", ui->checkBoxGridSnap->isChecked())); ui->checkBoxAutoconstraints->setChecked(hGrp->GetBool("AutoConstraints", ui->checkBoxAutoconstraints->isChecked())); + + ParameterGrp::handle hGrpp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); + + // 1->Normal Geometry, 2->Construction, 3->External + int topid = hGrpp->GetInt("TopRenderGeometryId",1); + int midid = hGrpp->GetInt("MidRenderGeometryId",2); + int lowid = hGrpp->GetInt("LowRenderGeometryId",3); + + QListWidgetItem *newItem = new QListWidgetItem; + newItem->setData(Qt::UserRole, QVariant(topid)); + newItem->setText( topid==1?tr("Normal Geometry"):topid==2?tr("Construction Geometry"):tr("External Geometry")); + ui->renderingOrder->insertItem(0,newItem); + + newItem = new QListWidgetItem; + newItem->setData(Qt::UserRole, QVariant(midid)); + newItem->setText(midid==1?tr("Normal Geometry"):midid==2?tr("Construction Geometry"):tr("External Geometry")); + ui->renderingOrder->insertItem(1,newItem); + + newItem = new QListWidgetItem; + newItem->setData(Qt::UserRole, QVariant(lowid)); + newItem->setText(lowid==1?tr("Normal Geometry"):lowid==2?tr("Construction Geometry"):tr("External Geometry")); + ui->renderingOrder->insertItem(2,newItem); } void SketcherGeneralWidget::toggleGridView(bool on) @@ -115,6 +141,20 @@ void SketcherGeneralWidget::changeEvent(QEvent *e) } } +void SketcherGeneralWidget::renderOrderChanged() +{ + int topid = ui->renderingOrder->item(0)->data(Qt::UserRole).toInt(); + int midid = ui->renderingOrder->item(1)->data(Qt::UserRole).toInt(); + int lowid = ui->renderingOrder->item(2)->data(Qt::UserRole).toInt(); + + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); + hGrp->SetInt("TopRenderGeometryId",topid); + hGrp->SetInt("MidRenderGeometryId",midid); + hGrp->SetInt("LowRenderGeometryId",lowid); + + emitrenderOrderChanged(); +} + // ---------------------------------------------------------------------------- TaskSketcherGeneral::TaskSketcherGeneral(ViewProviderSketch *sketchView) @@ -145,6 +185,11 @@ TaskSketcherGeneral::TaskSketcherGeneral(ViewProviderSketch *sketchView) this , SLOT (toggleAutoconstraints(int)) ); + QObject::connect( + widget, SIGNAL(emitrenderOrderChanged()), + this , SLOT (renderOrderChanged()) + ); + Gui::Selection().Attach(this); widget->loadSettings(); @@ -192,4 +237,9 @@ void TaskSketcherGeneral::OnChange(Gui::SelectionSingleton::SubjectType &rCaller } /// @endcond DOXERR +void TaskSketcherGeneral::renderOrderChanged() +{ + sketchView->updateColor(); +} + #include "moc_TaskSketcherGeneral.cpp" diff --git a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.h b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.h index f762f14c21..3aea413478 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.h +++ b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.h @@ -55,11 +55,13 @@ Q_SIGNALS: void emitToggleGridSnap(int); void emitSetGridSize(double); void emitToggleAutoconstraints(int); + void emitrenderOrderChanged(); public Q_SLOTS: void toggleGridView(bool on); void setGridSize(double val); void toggleGridSnap(int state); + void renderOrderChanged(); protected: void changeEvent(QEvent *e); @@ -88,6 +90,7 @@ public Q_SLOTS: void setGridSize(double val); void toggleGridSnap(int state); void toggleAutoconstraints(int state); + void renderOrderChanged(); private: ViewProviderSketch *sketchView; diff --git a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.ui b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.ui index 3d3d360eaa..3d149cf744 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.ui +++ b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.ui @@ -6,8 +6,8 @@ 0 0 - 153 - 115 + 194 + 228 @@ -34,26 +34,26 @@ - - - mm - - - 3 - - - 99999999.0 - - - 0.001 - - - 1.000000000000000 - - - 0.0000001 - - + + + mm + + + 3 + + + 99999999.000000000000000 + + + 0.001000000000000 + + + 1.000000000000000 + + + 0.000000100000000 + + @@ -80,16 +80,35 @@ + + + + Rendering order: + + + + + + + true + + + QAbstractItemView::InternalMove + + + false + + + + + + Gui::PrefQuantitySpinBox + QWidget +
Gui/PrefWidgets.h
+
+
- - - Gui::PrefQuantitySpinBox - QWidget -
Gui/PrefWidgets.h
-
-
- - + diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 38795fe221..ed4bf6ef3b 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -296,14 +296,18 @@ ViewProviderSketch::ViewProviderSketch() PointSize.setValue(4); zCross=0.001f; - zLines=0.005f; - zConstr=0.007f; // constraint not construction - zHighLine=0.006f; - zPoints=0.008f; - zHighlight=0.009f; - zText=0.011f; zEdit=0.001f; zInfo=0.004f; + zLowLines=0.005f; + //zLines=0.005f; // ZLines removed in favour of 3 height groups intended for NormalLines, ConstructionLines, ExternalLines + zMidLines=0.006f; + zHighLines=0.007f; // Lines that are somehow selected to be in the high position (higher than other line categories) + zHighLine=0.008f; // highlighted line (of any group) + zConstr=0.009f; // constraint not construction + zPoints=0.010f; + zHighlight=0.011f; + zText=0.011f; + xInit=0; yInit=0; @@ -2453,6 +2457,17 @@ void ViewProviderSketch::updateColor(void) //int intGeoCount = getSketchObject()->getHighestCurveIndex() + 1; //int extGeoCount = getSketchObject()->getExternalGeometryCount(); + ParameterGrp::handle hGrpp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); + + // 1->Normal Geometry, 2->Construction, 3->External + int topid = hGrpp->GetInt("TopRenderGeometryId",1); + int midid = hGrpp->GetInt("MidRenderGeometryId",2); + int lowid = hGrpp->GetInt("LowRenderGeometryId",3); + + float zNormLine = (topid==1?zHighLines:midid==1?zMidLines:zLowLines); + float zConstrLine = (topid==2?zHighLines:midid==2?zMidLines:zLowLines); + float zExtLine = (topid==3?zHighLines:midid==3?zMidLines:zLowLines); + float x,y,z; int j=0; // vertexindex @@ -2491,28 +2506,28 @@ void ViewProviderSketch::updateColor(void) color[i] = CurveExternalColor; for (int k=j; jgetGeometry(GeoId)->Construction) { color[i] = CurveDraftColor; for (int k=j; jFullyConstrained) { color[i] = FullyConstrainedColor; for (int k=j; j::const_iterator it = Coords.begin(); it != Coords.end(); ++it,i++) - verts[i].setValue(it->x,it->y,zLines); + verts[i].setValue(it->x,it->y,zLowLines); i=0; // setting up the indexes of the line set for (std::vector::const_iterator it = Index.begin(); it != Index.end(); ++it,i++) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index 656d1255de..4a0985a222 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -386,7 +386,7 @@ protected: static SbVec2s newCursorPos; float zCross; - float zLines; + //float zLines; float zPoints; float zConstr; float zHighlight; @@ -394,6 +394,9 @@ protected: float zEdit; float zHighLine; float zInfo; + float zLowLines; + float zMidLines; + float zHighLines; // reference coordinates for relative operations double xInit,yInit;