diff --git a/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp b/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp index a86030f569..30b08fb7a4 100644 --- a/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp +++ b/src/Mod/Sketcher/Gui/EditModeCoinManager.cpp @@ -424,7 +424,8 @@ void EditModeCoinManager::drawEditMarkers(const std::vector &Edi int i=0; // setting up the line set for (std::vector::const_iterator it = EditMarkers.begin(); it != EditMarkers.end(); ++it,i++) { - verts[i].setValue(it->x, it->y, drawingParameters.zEdit); + verts[i].setValue(it->x, it->y, + ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider) * drawingParameters.zEdit); color[i] = drawingParameters.InformationColor; } @@ -444,7 +445,8 @@ void EditModeCoinManager::drawEdit(const std::vector &EditCurve) int i=0; // setting up the line set for (std::vector::const_iterator it = EditCurve.begin(); it != EditCurve.end(); ++it,i++) { - verts[i].setValue(it->x,it->y, drawingParameters.zEdit); + verts[i].setValue(it->x,it->y, + ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider) * drawingParameters.zEdit); color[i] = drawingParameters.CreateCurveColor; } @@ -472,7 +474,8 @@ void EditModeCoinManager::drawEdit(const std::list> int indexindex=0; for(const auto & v : list) { for (const auto & p : v) { - verts[coordindex].setValue(p.x, p.y, drawingParameters.zEdit); + verts[coordindex].setValue(p.x, p.y, + ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider) * drawingParameters.zEdit); color[coordindex] = drawingParameters.CreateCurveColor; coordindex++; } @@ -489,7 +492,8 @@ void EditModeCoinManager::drawEdit(const std::list> void EditModeCoinManager::setPositionText(const Base::Vector2d &Pos, const SbString &text) { editModeScenegraphNodes.textX->string = text; - editModeScenegraphNodes.textPos->translation = SbVec3f(Pos.x, Pos.y, drawingParameters.zText); + editModeScenegraphNodes.textPos->translation = SbVec3f(Pos.x, Pos.y, + ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider) * drawingParameters.zText); } void EditModeCoinManager::setPositionText(const Base::Vector2d &Pos) @@ -639,10 +643,11 @@ void EditModeCoinManager::processGeometryInformationOverlay(const GeoListFacade void EditModeCoinManager::updateAxesLength() { - editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(0,SbVec3f(-analysisResults.boundingBoxMagnitudeOrder, 0.0f, drawingParameters.zCross)); - editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(1,SbVec3f(analysisResults.boundingBoxMagnitudeOrder, 0.0f, drawingParameters.zCross)); - editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(2,SbVec3f(0.0f, -analysisResults.boundingBoxMagnitudeOrder, drawingParameters.zCross)); - editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(3,SbVec3f(0.0f, analysisResults.boundingBoxMagnitudeOrder, drawingParameters.zCross)); + auto zCrossH = ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider) * drawingParameters.zCross; + editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(0,SbVec3f(-analysisResults.boundingBoxMagnitudeOrder, 0.0f, zCrossH)); + editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(1,SbVec3f(analysisResults.boundingBoxMagnitudeOrder, 0.0f, zCrossH)); + editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(2,SbVec3f(0.0f, -analysisResults.boundingBoxMagnitudeOrder, zCrossH)); + editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(3,SbVec3f(0.0f, analysisResults.boundingBoxMagnitudeOrder, zCrossH)); } void EditModeCoinManager::updateGridExtent() diff --git a/src/Mod/Sketcher/Gui/EditModeConstraintCoinManager.cpp b/src/Mod/Sketcher/Gui/EditModeConstraintCoinManager.cpp index fdea96b2bd..9b91b50f56 100644 --- a/src/Mod/Sketcher/Gui/EditModeConstraintCoinManager.cpp +++ b/src/Mod/Sketcher/Gui/EditModeConstraintCoinManager.cpp @@ -144,6 +144,8 @@ void EditModeConstraintCoinManager::processConstraints(const GeoListFacade & geo { const auto &constrlist = ViewProviderSketchCoinAttorney::getConstraints(viewProvider); + auto zConstrH = ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider) * drawingParameters.zConstr; + // After an undo/redo it can happen that we have an empty geometry list but a non-empty constraint list // In this case just ignore the constraints. (See bug #0000421) if (geolistfacade.geomlist.size() <= 2 && !constrlist.empty()) { @@ -337,7 +339,7 @@ Restart: auto translation = static_cast(sep->getChild(static_cast(ConstraintNodePosition::FirstTranslationIndex))); - translation->abPos = SbVec3f(midpos.x, midpos.y, drawingParameters.zConstr); //Absolute Reference + translation->abPos = SbVec3f(midpos.x, midpos.y, zConstrH); //Absolute Reference //Reference Position that is scaled according to zoom translation->translation = SbVec3f(relpos.x, relpos.y, 0); @@ -361,7 +363,7 @@ Restart: auto translation = static_cast(sep->getChild(static_cast(ConstraintNodePosition::FirstTranslationIndex))); - translation->abPos = SbVec3f(midpos1.x, midpos1.y, drawingParameters.zConstr); + translation->abPos = SbVec3f(midpos1.x, midpos1.y, zConstrH); translation->translation = SbVec3f(relpos1.x, relpos1.y, 0); Base::Vector3d relpos2 = seekConstraintPosition(midpos2, norm2, dir2, 4.0, editModeScenegraphNodes.constrGroup->getChild(i)); @@ -370,7 +372,7 @@ Restart: translation = static_cast(sep->getChild(static_cast(ConstraintNodePosition::SecondTranslationIndex))); - translation->abPos = SbVec3f(secondPos.x, secondPos.y, drawingParameters.zConstr); + translation->abPos = SbVec3f(secondPos.x, secondPos.y, zConstrH); translation->translation = SbVec3f(relpos2.x -relpos1.x, relpos2.y -relpos1.y, 0); } } @@ -466,7 +468,7 @@ Restart: auto translation = static_cast(sep->getChild(static_cast(ConstraintNodePosition::FirstTranslationIndex))); - translation->abPos = SbVec3f(midpos1.x, midpos1.y, drawingParameters.zConstr); + translation->abPos = SbVec3f(midpos1.x, midpos1.y, zConstrH); translation->translation = SbVec3f(relpos1.x, relpos1.y, 0); if (twoIcons) { @@ -474,7 +476,7 @@ Restart: Base::Vector3d secondPos = midpos2 - midpos1; auto translation = static_cast(sep->getChild(static_cast(ConstraintNodePosition::SecondTranslationIndex))); - translation->abPos = SbVec3f(secondPos.x, secondPos.y, drawingParameters.zConstr); + translation->abPos = SbVec3f(secondPos.x, secondPos.y, zConstrH); translation->translation = SbVec3f(relpos2.x -relpos1.x, relpos2.y -relpos1.y, 0); } @@ -660,7 +662,7 @@ Restart: auto translation = static_cast(sep->getChild(static_cast(ConstraintNodePosition::FirstTranslationIndex))); - translation->abPos = SbVec3f(midpos1.x, midpos1.y, drawingParameters.zConstr); //Absolute Reference + translation->abPos = SbVec3f(midpos1.x, midpos1.y, zConstrH); //Absolute Reference //Reference Position that is scaled according to zoom translation->translation = SbVec3f(relpos1.x, relpos1.y, 0); @@ -669,7 +671,7 @@ Restart: translation = static_cast(sep->getChild(static_cast(ConstraintNodePosition::SecondTranslationIndex))); - translation->abPos = SbVec3f(secondPos.x, secondPos.y, drawingParameters.zConstr); //Absolute Reference + translation->abPos = SbVec3f(secondPos.x, secondPos.y, zConstrH); //Absolute Reference //Reference Position that is scaled according to zoom translation->translation = SbVec3f(relpos2.x - relpos1.x, relpos2.y -relpos1.y, 0); @@ -728,8 +730,8 @@ Restart: asciiText->pnts.setNum(2); SbVec3f *verts = asciiText->pnts.startEditing(); - verts[0] = SbVec3f (pnt1.x, pnt1.y, drawingParameters.zConstr); - verts[1] = SbVec3f (pnt2.x, pnt2.y, drawingParameters.zConstr); + verts[0] = SbVec3f (pnt1.x, pnt1.y, zConstrH); + verts[1] = SbVec3f (pnt2.x, pnt2.y, zConstrH); asciiText->pnts.finishEditing(); @@ -781,7 +783,7 @@ Restart: auto translation = static_cast(sep->getChild(static_cast(ConstraintNodePosition::FirstTranslationIndex))); - translation->abPos = SbVec3f(pos.x, pos.y, drawingParameters.zConstr); //Absolute Reference + translation->abPos = SbVec3f(pos.x, pos.y, zConstrH); //Absolute Reference translation->translation = SbVec3f(relPos.x, relPos.y, 0); } else if (Constr->Type == Tangent) { @@ -806,14 +808,14 @@ Restart: auto translation = static_cast(sep->getChild(static_cast(ConstraintNodePosition::FirstTranslationIndex))); - translation->abPos = SbVec3f(midpos1.x, midpos1.y, drawingParameters.zConstr); //Absolute Reference + translation->abPos = SbVec3f(midpos1.x, midpos1.y, zConstrH); //Absolute Reference translation->translation = SbVec3f(relpos1.x, relpos1.y, 0); Base::Vector3d secondPos = midpos2 - midpos1; translation = static_cast(sep->getChild(static_cast(ConstraintNodePosition::SecondTranslationIndex))); - translation->abPos = SbVec3f(secondPos.x, secondPos.y, drawingParameters.zConstr); //Absolute Reference + translation->abPos = SbVec3f(secondPos.x, secondPos.y, zConstrH); //Absolute Reference translation->translation = SbVec3f(relpos2.x -relpos1.x, relpos2.y -relpos1.y, 0); break; @@ -895,7 +897,7 @@ Restart: } auto translation = static_cast(sep->getChild(static_cast(ConstraintNodePosition::FirstTranslationIndex))); - translation->abPos = SbVec3f(pos.x, pos.y, drawingParameters.zConstr); //Absolute Reference + translation->abPos = SbVec3f(pos.x, pos.y, zConstrH); //Absolute Reference translation->translation = SbVec3f(relPos.x, relPos.y, 0); } } @@ -908,8 +910,8 @@ Restart: Base::Vector3d pnt1 = geolistfacade.getPoint(Constr->First, Constr->FirstPos); Base::Vector3d pnt2 = geolistfacade.getPoint(Constr->Second, Constr->SecondPos); - SbVec3f p1(pnt1.x, pnt1.y, drawingParameters.zConstr); - SbVec3f p2(pnt2.x, pnt2.y, drawingParameters.zConstr); + SbVec3f p1(pnt1.x, pnt1.y, zConstrH); + SbVec3f p2(pnt2.x, pnt2.y, zConstrH); SbVec3f dir = (p2-p1); dir.normalize(); SbVec3f norm (-dir[1],dir[0],0); @@ -1086,8 +1088,8 @@ Restart: } else break; - SbVec3f p1(pnt1.x, pnt1.y, drawingParameters.zConstr); - SbVec3f p2(pnt2.x, pnt2.y, drawingParameters.zConstr); + SbVec3f p1(pnt1.x, pnt1.y, zConstrH); + SbVec3f p2(pnt2.x, pnt2.y, zConstrH); SoDatumLabel *asciiText = static_cast(sep->getChild(static_cast(ConstraintNodePosition::DatumLabelIndex))); @@ -1149,8 +1151,8 @@ Restart: } else break; - SbVec3f p1(pnt1.x, pnt1.y, drawingParameters.zConstr); - SbVec3f p2(pnt2.x, pnt2.y, drawingParameters.zConstr); + SbVec3f p1(pnt1.x, pnt1.y, zConstrH); + SbVec3f p2(pnt2.x, pnt2.y, zConstrH); SoDatumLabel *asciiText = static_cast(sep->getChild(static_cast(ConstraintNodePosition::DatumLabelIndex))); diff --git a/src/Mod/Sketcher/Gui/EditModeGeometryCoinConverter.cpp b/src/Mod/Sketcher/Gui/EditModeGeometryCoinConverter.cpp index 24f0c1f361..63fc0a95cf 100644 --- a/src/Mod/Sketcher/Gui/EditModeGeometryCoinConverter.cpp +++ b/src/Mod/Sketcher/Gui/EditModeGeometryCoinConverter.cpp @@ -47,6 +47,7 @@ #include "Mod/Sketcher/App/Constraint.h" #include "EditModeGeometryCoinConverter.h" +#include "ViewProviderSketchCoinAttorney.h" using namespace SketcherGui; @@ -226,7 +227,8 @@ void EditModeGeometryCoinConverter::convert(const Sketcher::GeoListFacade & geol int i=0; // setting up the line set for (std::vector::const_iterator it = Coords[l].begin(); it != Coords[l].end(); ++it,i++) - verts[i].setValue(it->x,it->y,drawingParameters.zLowLines); + verts[i].setValue(it->x,it->y, + ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider) * drawingParameters.zLowLines); i=0; // setting up the indexes of the line set for (std::vector::const_iterator it = Index[l].begin(); it != Index[l].end(); ++it,i++) @@ -234,7 +236,8 @@ void EditModeGeometryCoinConverter::convert(const Sketcher::GeoListFacade & geol i=0; // setting up the point set for (std::vector::const_iterator it = Points[l].begin(); it != Points[l].end(); ++it,i++) - pverts[i].setValue(it->x,it->y,drawingParameters.zLowPoints); + pverts[i].setValue(it->x,it->y, + ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider) * drawingParameters.zLowPoints); geometryLayerNodes.CurvesCoordinate[l]->point.finishEditing(); geometryLayerNodes.CurveSet[l]->numVertices.finishEditing(); diff --git a/src/Mod/Sketcher/Gui/EditModeGeometryCoinConverter.h b/src/Mod/Sketcher/Gui/EditModeGeometryCoinConverter.h index fae35fcc3d..45164e74cf 100644 --- a/src/Mod/Sketcher/Gui/EditModeGeometryCoinConverter.h +++ b/src/Mod/Sketcher/Gui/EditModeGeometryCoinConverter.h @@ -26,6 +26,8 @@ #include +#include "ViewProviderSketch.h" + namespace Base { template< typename T > class Vector3; diff --git a/src/Mod/Sketcher/Gui/EditModeGeometryCoinManager.cpp b/src/Mod/Sketcher/Gui/EditModeGeometryCoinManager.cpp index 966b96194e..64dbf72c00 100644 --- a/src/Mod/Sketcher/Gui/EditModeGeometryCoinManager.cpp +++ b/src/Mod/Sketcher/Gui/EditModeGeometryCoinManager.cpp @@ -200,6 +200,7 @@ void EditModeGeometryCoinManager::updateGeometryColor(const GeoListFacade & geol // Update Colors SbColor *crosscolor = editModeScenegraphNodes.RootCrossMaterials->diffuseColor.startEditing(); + auto viewOrientationFactor = ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider); for(int l=0; lgetConstruction()) - pverts[i].setValue(x,y,zConstrPoint); + pverts[i].setValue(x,y,viewOrientationFactor * zConstrPoint); else - pverts[i].setValue(x,y,zNormPoint); + pverts[i].setValue(x,y,viewOrientationFactor * zNormPoint); } } } @@ -352,35 +353,35 @@ void EditModeGeometryCoinManager::updateGeometryColor(const GeoListFacade & geol color[i] = drawingParameters.PreselectSelectedColor; for (int k=j; jpoint.startEditing(); for(size_t i = 0; i < result.coordinates.size(); i++) - vts[i].setValue(result.coordinates[i].x, result.coordinates[i].y, drawingParameters.zInfo); + vts[i].setValue(result.coordinates[i].x, result.coordinates[i].y, + ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider) * drawingParameters.zInfo); for(size_t i = 0; i < result.indices.size(); i++) index[i] = result.indices[i]; @@ -348,7 +352,8 @@ void EditModeInformationOverlayCoinConverter::addNode(const Result & result) { SoTranslation *translate = new SoTranslation; - translate->translation.setValue(result.positions[i].x, result.positions[i].y, drawingParameters.zInfo); + translate->translation.setValue(result.positions[i].x, result.positions[i].y, + ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider) * drawingParameters.zInfo); SoFont *font = new SoFont; font->name.setValue("Helvetica"); @@ -425,7 +430,7 @@ void EditModeInformationOverlayCoinConverter::updateNode(const Result & result) SoSeparator *sep = static_cast(sw->getChild(0)); - static_cast(sep->getChild(static_cast(TextNodePosition::TextCoordinates)))->translation.setValue(result.positions[i].x, result.positions[i].y, drawingParameters.zInfo); + static_cast(sep->getChild(static_cast(TextNodePosition::TextCoordinates)))->translation.setValue(result.positions[i].x, result.positions[i].y, ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider) * drawingParameters.zInfo); // since the first and last control point of a spline is also treated as knot and thus // can also have a displayed multiplicity, we must assure the multiplicity is not visibly overwritten diff --git a/src/Mod/Sketcher/Gui/EditModeInformationOverlayCoinConverter.h b/src/Mod/Sketcher/Gui/EditModeInformationOverlayCoinConverter.h index d24ba11c7e..aae6ce9b42 100644 --- a/src/Mod/Sketcher/Gui/EditModeInformationOverlayCoinConverter.h +++ b/src/Mod/Sketcher/Gui/EditModeInformationOverlayCoinConverter.h @@ -26,6 +26,8 @@ #include +#include "ViewProviderSketch.h" + namespace Base { template< typename T > class Vector3;