[TD]fix center marks not shown

This commit is contained in:
wandererfan
2025-11-03 16:44:51 -05:00
committed by Chris Hennes
parent b918cac67a
commit f0da095cf8
2 changed files with 115 additions and 48 deletions

View File

@@ -63,6 +63,7 @@
#include "ZVALUE.h"
#include "PathBuilder.h"
#include "QGIBreakLine.h"
#include "QGSPage.h"
using namespace TechDraw;
using namespace TechDrawGui;
@@ -101,8 +102,15 @@ QVariant QGIViewPart::itemChange(GraphicsItemChange change, const QVariant& valu
bool selectState = value.toBool();
if (!selectState && !isUnderMouse()) {
// hide everything
bool hideCenters = hideCenterMarks();
for (auto& child : childItems()) {
if (child->type() == UserType::QGIVertex || child->type() == UserType::QGICMark) {
if (child->type() == UserType::QGIVertex) {
child->hide();
continue;
}
if (child->type() == UserType::QGICMark &&
hideCenters) {
child->hide();
}
}
@@ -116,15 +124,21 @@ QVariant QGIViewPart::itemChange(GraphicsItemChange change, const QVariant& valu
}
else if (change == QGraphicsItem::ItemSceneHasChanged) {
if (scene()) {
// added to scene
m_selectionChangedConnection = connect(scene(), &QGraphicsScene::selectionChanged, this, [this]() {
// When selection changes, if the mouse is not over the view,
// hide any non-selected vertices.
if (!isUnderMouse()) {
bool hideCenters = hideCenterMarks();
for (auto* child : childItems()) {
if ((child->type() == UserType::QGIVertex || child->type() == UserType::QGICMark) &&
if (child->type() == UserType::QGIVertex &&
!child->isSelected()) {
child->hide();
}
if (child->type() == UserType::QGICMark &&
hideCenters) {
child->hide();
}
}
update();
}
@@ -159,7 +173,6 @@ bool QGIViewPart::sceneEventFilter(QGraphicsItem *watched, QEvent *event)
//! selected, remove it from the view.
bool QGIViewPart::removeSelectedCosmetic() const
{
// Base::Console().message("QGIVP::removeSelectedCosmetic()\n");
auto dvp(dynamic_cast<TechDraw::DrawViewPart*>(getViewObject()));
if (!dvp) {
throw Base::RuntimeError("Graphic has no feature!");
@@ -458,7 +471,8 @@ void QGIViewPart::drawAllVertexes()
QColor vertexColor = PreferencesGui::getAccessibleQColor(PreferencesGui::vertexQColor());
const std::vector<TechDraw::VertexPtr>& verts = dvp->getVertexGeometry();
std::vector<TechDraw::VertexPtr>::const_iterator vert = verts.begin();
auto vert = verts.begin();
bool hideCenters = hideCenterMarks();
for (int i = 0; vert != verts.end(); ++vert, i++) {
if ((*vert)->isCenter()) {
if (showCenterMarks()) {
@@ -469,7 +483,7 @@ void QGIViewPart::drawAllVertexes()
cmItem->setSize(getVertexSize() * vp->CenterScale.getValue());
cmItem->setPrettyNormal();
cmItem->setZValue(ZVALUE::VERTEX);
cmItem->setVisible(m_isHovered);
cmItem->setVisible(!hideCenters);
}
} else {
//regular Vertex
@@ -482,7 +496,7 @@ void QGIViewPart::drawAllVertexes()
item->setRadius(getVertexSize());
item->setPrettyNormal();
item->setZValue(ZVALUE::VERTEX);
item->setVisible(m_isHovered);
item->setVisible(m_isHovered || isSelected());
}
}
}
@@ -513,39 +527,6 @@ bool QGIViewPart::showThisEdge(BaseGeomPtr geom)
return false;
}
// returns true if vertex dots should be shown
bool QGIViewPart::showVertices()
{
// dvp and vp already validated
auto dvp(static_cast<TechDraw::DrawViewPart*>(getViewObject()));
if (dvp->CoarseView.getValue()) {
// never show vertices in CoarseView
return false;
}
return true;
}
// returns true if arc center marks should be shown
bool QGIViewPart::showCenterMarks()
{
// dvp and vp already validated
auto dvp(static_cast<TechDraw::DrawViewPart*>(getViewObject()));
auto vp(static_cast<ViewProviderViewPart*>(getViewProvider(dvp)));
if (!vp->ArcCenterMarks.getValue()) {
// no center marks if view property is false
return false;
}
if (prefPrintCenters()) {
// frames are off, view property is true and Print Center Marks is true
return true;
}
return true;
}
bool QGIViewPart::formatGeomFromCosmetic(std::string cTag, QGIEdge* item)
{
@@ -1202,11 +1183,6 @@ bool QGIViewPart::prefFaceEdges()
return result;
}
bool QGIViewPart::prefPrintCenters()
{
bool printCenters = Preferences::getPreferenceGroup("Decorations")->GetBool("PrintCenterMarks", false);//true matches v0.18 behaviour
return printCenters;
}
Base::Color QGIViewPart::prefBreaklineColor()
{
@@ -1330,11 +1306,98 @@ void QGIViewPart::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
QGIView::hoverLeaveEvent(event);
if (isSelected()) {
// if the view is selected, we should leave things alone.
return;
}
bool hideCenters = hideCenterMarks();
for (auto& child : childItems()) {
if ((child->type() == UserType::QGIVertex || child->type() == UserType::QGICMark) &&
if (child->type() == UserType::QGIVertex &&
!child->isSelected()) {
child->hide();
continue;
}
if (child->type() == UserType::QGICMark) {
if (child->isSelected()) {
continue;
}
if (hideCenters) {
child->hide();
}
}
}
update();
}
bool QGIViewPart::isExporting() const
{
// dvp already validated
auto viewPart {freecad_cast<TechDraw::DrawViewPart*>(getViewObject())};
auto vpPage = getViewProviderPage(viewPart);
QGSPage* scenePage = vpPage->getQGSPage();
if (!scenePage) {
return false;
}
return scenePage->getExportingAny();
}
// returns true if vertex dots should be shown
bool QGIViewPart::showVertices() const
{
// dvp already validated
auto dvp(static_cast<TechDraw::DrawViewPart*>(getViewObject()));
if (dvp->CoarseView.getValue()) {
// never show vertices in CoarseView
return false;
}
// if (isSelected()) {
// return true;
// }
// if we have selected verts?
return true;
}
// returns true if arc center marks should be shown
bool QGIViewPart::showCenterMarks() const
{
// dvp and vp already validated
auto dvp(static_cast<TechDraw::DrawViewPart*>(getViewObject()));
auto vp(static_cast<ViewProviderViewPart*>(getViewProvider(dvp)));
if (isExporting() && Preferences::printCenterMarks()) {
return true;
}
return vp->ArcCenterMarks.getValue();
}
//! true if center marks (type of vertex) should be hidden
bool QGIViewPart::hideCenterMarks() const
{
// printing
if (isExporting() &&
Preferences::printCenterMarks()) {
return false;
}
// on screen
if (showCenterMarks()) {
return false;
}
return true;
}

View File

@@ -126,6 +126,11 @@ public:
virtual double getLineWidth();
virtual double getVertexSize();
bool isExporting() const;
bool hideCenterMarks() const;
protected:
bool sceneEventFilter(QGraphicsItem *watched, QEvent *event) override;
QPainterPath drawPainterPath(TechDraw::BaseGeomPtr baseGeom) const;
@@ -142,14 +147,13 @@ protected:
void removePrimitives();
void removeDecorations();
bool prefFaceEdges();
bool prefPrintCenters();
Base::Color prefBreaklineColor();
bool formatGeomFromCosmetic(std::string cTag, QGIEdge* item);
bool formatGeomFromCenterLine(std::string cTag, QGIEdge* item);
bool showCenterMarks();
bool showVertices();
bool showCenterMarks() const;
bool showVertices() const;
private:
QList<QGraphicsItem*> deleteItems;