TechDraw: Rework view frames (#22869)

Co-authored-by: Ryan Kembrey <ryan.kembrey@student.uts>
This commit is contained in:
Ryan K
2025-08-12 02:04:58 +10:00
committed by GitHub
parent bb444a4a04
commit 9fff6e905c
13 changed files with 194 additions and 241 deletions

View File

@@ -21,6 +21,7 @@
***************************************************************************/
#include "PreCompiled.h"
#include <cstdio>
#ifndef _PreComp_
#include <QPainterPath>
@@ -104,8 +105,26 @@ QVariant QGIViewPart::itemChange(GraphicsItemChange change, const QVariant& valu
//There's nothing special for QGIVP to do when selection changes!
}
else if (change == ItemSceneChange && scene()) {
QObject::disconnect(m_selectionChangedConnection);
tidy();
}
else if (change == QGraphicsItem::ItemSceneHasChanged) {
if (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()) {
for (QGraphicsItem* item : m_vertexItems) {
if (item && !item->isSelected()) {
item->setVisible(false);
}
}
update();
}
});
}
}
return QGIView::itemChange(change, value);
}
@@ -183,7 +202,6 @@ QPainterPath QGIViewPart::drawPainterPath(TechDraw::BaseGeomPtr baseGeom) const
double rot = getViewObject()->Rotation.getValue();
return m_pathBuilder->geomToPainterPath(baseGeom, rot);
}
void QGIViewPart::updateView(bool update)
{
// Base::Console().message("QGIVP::updateView() - %s\n", getViewObject()->getNameInDocument());
@@ -429,6 +447,7 @@ void QGIViewPart::drawAllEdges()
void QGIViewPart::drawAllVertexes()
{
m_vertexItems.clear();
// dvp and vp already validated
auto dvp(static_cast<TechDraw::DrawViewPart*>(getViewObject()));
auto vp(static_cast<ViewProviderViewPart*>(getViewProvider(getViewObject())));
@@ -442,23 +461,27 @@ void QGIViewPart::drawAllVertexes()
if (showCenterMarks()) {
QGICMark* cmItem = new QGICMark(i);
addToGroup(cmItem);
m_vertexItems.append(cmItem);
cmItem->setPos(Rez::guiX((*vert)->x()), Rez::guiX((*vert)->y()));
cmItem->setThick(0.5F * getLineWidth());//need minimum?
cmItem->setSize(getVertexSize() * vp->CenterScale.getValue());
cmItem->setPrettyNormal();
cmItem->setZValue(ZVALUE::VERTEX);
cmItem->setVisible(false);
}
} else {
//regular Vertex
if (showVertices()) {
QGIVertex* item = new QGIVertex(i);
addToGroup(item);
m_vertexItems.append(item);
item->setPos(Rez::guiX((*vert)->x()), Rez::guiX((*vert)->y()));
item->setNormalColor(vertexColor);
item->setFillColor(vertexColor);
item->setRadius(getVertexSize());
item->setPrettyNormal();
item->setZValue(ZVALUE::VERTEX);
item->setVisible(false);
}
}
}
@@ -499,11 +522,6 @@ bool QGIViewPart::showVertices()
// never show vertices in CoarseView
return false;
}
if (!getFrameState()) {
// frames are off, don't show vertices
return false;
}
return true;
}
@@ -519,18 +537,12 @@ bool QGIViewPart::showCenterMarks()
// no center marks if view property is false
return false;
}
if (getFrameState()) {
// frames are on and view property is true
return true;
}
if (prefPrintCenters()) {
// frames are off, view property is true and Print Center Marks is true
return true;
}
return false;
return true;
}
@@ -1299,3 +1311,27 @@ double QGIViewPart::getLineWidth() {
double QGIViewPart::getVertexSize() {
return getLineWidth() * Preferences::vertexScale();
}
void QGIViewPart::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
QGIView::hoverEnterEvent(event);
for (QGraphicsItem* item : m_vertexItems) {
if (item) {
item->setVisible(true);
}
}
update();
}
void QGIViewPart::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
QGIView::hoverLeaveEvent(event);
for (QGraphicsItem* item : m_vertexItems) {
if (item && !item->isSelected()) {
item->setVisible(false);
}
}
update();
}