[TD]fix center marks not shown
This commit is contained in:
committed by
Chris Hennes
parent
c23584964d
commit
ddd3a5697f
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user