From 20f352ac65ec5923849f7c4232f92aa121a1c067 Mon Sep 17 00:00:00 2001 From: wandererfan Date: Thu, 11 Jul 2019 20:23:24 -0400 Subject: [PATCH] [TD] Improve CenterMark handling on print --- src/Mod/TechDraw/Gui/QGIViewPart.cpp | 88 +++++++++++++++------------- src/Mod/TechDraw/Gui/QGIViewPart.h | 4 +- 2 files changed, 51 insertions(+), 41 deletions(-) diff --git a/src/Mod/TechDraw/Gui/QGIViewPart.cpp b/src/Mod/TechDraw/Gui/QGIViewPart.cpp index 074031dc6b..1ecec450c3 100644 --- a/src/Mod/TechDraw/Gui/QGIViewPart.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewPart.cpp @@ -407,7 +407,7 @@ void QGIViewPart::drawViewPart() } } } - bool drawEdges = getFaceEdgesPref(); + bool drawEdges = prefFaceEdges(); newFace->setDrawEdges(drawEdges); //pref. for debugging only newFace->setZValue(ZVALUE::FACE); newFace->draw(); @@ -482,23 +482,43 @@ void QGIViewPart::drawViewPart() fcColor.setPackedValue(hGrp->GetUnsigned("VertexColor", 0x00000000)); QColor vertexColor = fcColor.asValue(); - if (getFrameState()) { - bool usePolygonHLR = viewPart->CoarseView.getValue(); - const std::vector &verts = viewPart->getVertexGeometry(); - std::vector::const_iterator vert = verts.begin(); - bool showCenters = vp->ArcCenterMarks.getValue(); - double cAdjust = vp->CenterScale.getValue(); - for(int i = 0 ; vert != verts.end(); ++vert, i++) { - if ((*vert)->isCenter) { - if (showCenters) { - QGICMark* cmItem = new QGICMark(i); - addToGroup(cmItem); - cmItem->setPos(Rez::guiX((*vert)->pnt.x), Rez::guiX((*vert)->pnt.y)); - cmItem->setThick(0.5 * lineWidth); //need minimum? - cmItem->setSize( cAdjust * lineWidth * vertexScaleFactor); - cmItem->setZValue(ZVALUE::VERTEX); - } - } else if(!usePolygonHLR){ //Disable dots WHEN usePolygonHLR + bool showVertices = true; + bool showCenterMarks = true; +// bool usePolygonHLR = viewPart->CoarseView.getValue(); + if (getFrameState()) { //frames are on + if (viewPart->CoarseView.getValue()) { + showVertices = false; + } + if (!vp->ArcCenterMarks.getValue()) { + showCenterMarks = false; + } + } else { //frames are off + showVertices = false; + if (!prefPrintCenters()) { //based on preference (!frame && !pref) + showCenterMarks = false; + } + if (!vp->ArcCenterMarks.getValue()) { //based on property (!frame && !prop) + showCenterMarks = false; + } + } + + const std::vector &verts = viewPart->getVertexGeometry(); + std::vector::const_iterator vert = verts.begin(); + double cAdjust = vp->CenterScale.getValue(); + + for(int i = 0 ; vert != verts.end(); ++vert, i++) { + if ((*vert)->isCenter) { + if (showCenterMarks) { + QGICMark* cmItem = new QGICMark(i); + addToGroup(cmItem); + cmItem->setPos(Rez::guiX((*vert)->pnt.x), Rez::guiX((*vert)->pnt.y)); + cmItem->setThick(0.5 * lineWidth); //need minimum? + cmItem->setSize( cAdjust * lineWidth * vertexScaleFactor); + cmItem->setPrettyNormal(); + cmItem->setZValue(ZVALUE::VERTEX); + } + } else { //regular Vertex + if (showVertices) { QGIVertex *item = new QGIVertex(i); TechDraw::CosmeticVertex* cv = viewPart->getCosmeticVertexByLink(i); if (cv != nullptr) { @@ -508,9 +528,9 @@ void QGIViewPart::drawViewPart() item->setNormalColor(vertexColor); item->setRadius(lineWidth * vertexScaleFactor); } - item->setPrettyNormal(); addToGroup(item); item->setPos(Rez::guiX((*vert)->pnt.x), Rez::guiX((*vert)->pnt.y)); + item->setPrettyNormal(); item->setZValue(ZVALUE::VERTEX); } } @@ -973,26 +993,6 @@ void QGIViewPart::toggleCosmeticLines(bool state) } } -//// is there any circumstance where vertices need to be in a different state from frames? -//void QGIViewPart::toggleVertices(bool state) -//{ -// Base::Console().Message("QGIVP::toggleVertices(%d) - %s\n",state,getViewName()); -//// QList items = childItems(); -//// for(QList::iterator it = items.begin(); it != items.end(); it++) { -//// QGIVertex *vert = dynamic_cast(*it); -//// QGICMark *mark = dynamic_cast(*it); - -//// if(vert) { -//// if (!mark) { //leave center marks showing -//// if(state) -//// vert->show(); -//// else -//// vert->hide(); -//// } -//// } -//// } -//} - TechDraw::DrawHatch* QGIViewPart::faceIsHatched(int i,std::vector hatchObjs) const { TechDraw::DrawHatch* result = nullptr; @@ -1063,7 +1063,7 @@ void QGIViewPart::rotateView(void) { } -bool QGIViewPart::getFaceEdgesPref(void) +bool QGIViewPart::prefFaceEdges(void) { bool result = false; Base::Reference hGrp = App::GetApplication().GetUserParameter() @@ -1071,3 +1071,11 @@ bool QGIViewPart::getFaceEdgesPref(void) result = hGrp->GetBool("DrawFaceEdges", 0l); return result; } + +bool QGIViewPart::prefPrintCenters(void) +{ + Base::Reference hGrp = App::GetApplication().GetUserParameter().GetGroup("BaseApp")-> + GetGroup("Preferences")->GetGroup("Mod/TechDraw/Decorations"); + bool printCenters = hGrp->GetBool("PrintCenterMarks", true); //true matches v0.18 behaviour + return printCenters; +} diff --git a/src/Mod/TechDraw/Gui/QGIViewPart.h b/src/Mod/TechDraw/Gui/QGIViewPart.h index eff897915d..78d1346d82 100644 --- a/src/Mod/TechDraw/Gui/QGIViewPart.h +++ b/src/Mod/TechDraw/Gui/QGIViewPart.h @@ -102,7 +102,9 @@ protected: void dumpPath(const char* text,QPainterPath path); void removePrimitives(void); void removeDecorations(void); - bool getFaceEdgesPref(void); + bool prefFaceEdges(void); + bool prefPrintCenters(void); + private: QList deleteItems;