Correct delayed scaling of center/section lines

This commit is contained in:
wandererfan
2018-03-11 11:24:17 -04:00
committed by wmayer
parent 91ccfca926
commit 04421039a8
3 changed files with 69 additions and 50 deletions

View File

@@ -159,22 +159,22 @@ QPainterPath QGIViewPart::geomToPainterPath(TechDrawGeometry::BaseGeom *baseGeom
double y = geom->center.y - geom->radius;
path.addEllipse(Rez::guiX(x),
Rez::guiX(y),
Rez::guiX(geom->radius * 2),
Rez::guiX(y),
Rez::guiX(geom->radius * 2),
Rez::guiX(geom->radius * 2)); //topleft@(x,y) radx,rady
} break;
case TechDrawGeometry::ARCOFCIRCLE: {
TechDrawGeometry::AOC *geom = static_cast<TechDrawGeometry::AOC *>(baseGeom);
pathArc(path,
Rez::guiX(geom->radius),
Rez::guiX(geom->radius),
0.,
geom->largeArc,
pathArc(path,
Rez::guiX(geom->radius),
Rez::guiX(geom->radius),
0.,
geom->largeArc,
geom->cw,
Rez::guiX(geom->endPnt.x),
Rez::guiX(geom->endPnt.x),
Rez::guiX(geom->endPnt.y),
Rez::guiX(geom->startPnt.x),
Rez::guiX(geom->startPnt.x),
Rez::guiX(geom->startPnt.y));
} break;
case TechDrawGeometry::ELLIPSE: {
@@ -186,41 +186,41 @@ QPainterPath QGIViewPart::geomToPainterPath(TechDrawGeometry::BaseGeom *baseGeom
endX = geom->center.x - geom->major * cos(geom->angle),
endY = geom->center.y - geom->major * sin(geom->angle);
pathArc(path,
Rez::guiX(geom->major),
Rez::guiX(geom->minor),
geom->angle,
false,
pathArc(path,
Rez::guiX(geom->major),
Rez::guiX(geom->minor),
geom->angle,
false,
Rez::guiX(endX),
Rez::guiX(endY),
Rez::guiX(startX),
false,
Rez::guiX(endX),
Rez::guiX(endY),
Rez::guiX(startX),
Rez::guiX(startY));
pathArc(path,
Rez::guiX(geom->major),
Rez::guiX(geom->minor),
geom->angle,
false,
pathArc(path,
Rez::guiX(geom->major),
Rez::guiX(geom->minor),
geom->angle,
false,
Rez::guiX(startX),
Rez::guiX(startY),
Rez::guiX(endX),
false,
Rez::guiX(startX),
Rez::guiX(startY),
Rez::guiX(endX),
Rez::guiX(endY));
} break;
case TechDrawGeometry::ARCOFELLIPSE: {
TechDrawGeometry::AOE *geom = static_cast<TechDrawGeometry::AOE *>(baseGeom);
pathArc(path,
Rez::guiX(geom->major),
Rez::guiX(geom->minor),
geom->angle,
geom->largeArc,
pathArc(path,
Rez::guiX(geom->major),
Rez::guiX(geom->minor),
geom->angle,
geom->largeArc,
geom->cw,
Rez::guiX(geom->endPnt.x),
Rez::guiX(geom->endPnt.x),
Rez::guiX(geom->endPnt.y),
Rez::guiX(geom->startPnt.x),
Rez::guiX(geom->startPnt.x),
Rez::guiX(geom->startPnt.y));
} break;
@@ -353,6 +353,9 @@ void QGIViewPart::draw() {
drawViewPart();
drawMatting();
QGIView::draw();
drawCenterLines(true); //have to draw centerlines after border to get size correct.
drawAllSectionLines(); //same for section lines
}
void QGIViewPart::drawViewPart()
@@ -364,7 +367,7 @@ void QGIViewPart::drawViewPart()
if (!viewPart->hasGeometry()) {
return;
}
auto vp = static_cast<ViewProviderViewPart*>(getViewProvider(getViewObject()));
if ( vp == nullptr ) {
return;
@@ -427,7 +430,7 @@ void QGIViewPart::drawViewPart()
newFace->setHatchColor(hatchVp->HatchColor.getValue());
}
}
}
}
bool drawEdges = getFaceEdgesPref();
newFace->setDrawEdges(drawEdges); //pref. for debugging only
newFace->setZValue(ZVALUE::FACE);
@@ -512,22 +515,12 @@ void QGIViewPart::drawViewPart()
item->setZValue(ZVALUE::VERTEX);
}
}
//draw section line
if (vp->ShowSectionLine.getValue()) {
auto refs = viewPart->getSectionRefs();
for (auto& r:refs) {
drawSectionLine(r, true);
}
}
//draw detail highlights
auto drefs = viewPart->getDetailRefs();
for (auto& r:drefs) {
drawHighlight(r, true);
}
//draw center lines
drawCenterLines(true);
}
QGIFace* QGIViewPart::drawFace(TechDrawGeometry::Face* f, int idx)
@@ -597,14 +590,32 @@ void QGIViewPart::removeDecorations()
}
}
void QGIViewPart::drawAllSectionLines(void)
{
TechDraw::DrawViewPart *viewPart = static_cast<TechDraw::DrawViewPart *>(getViewObject());
if (!viewPart) {
return;
}
auto vp = static_cast<ViewProviderViewPart*>(getViewProvider(getViewObject()));
if ( vp == nullptr ) {
return;
}
if (vp->ShowSectionLine.getValue()) {
auto refs = viewPart->getSectionRefs();
for (auto& r:refs) {
drawSectionLine(r, true);
}
}
}
void QGIViewPart::drawSectionLine(TechDraw::DrawViewSection* viewSection, bool b)
{
TechDraw::DrawViewPart *viewPart = static_cast<TechDraw::DrawViewPart *>(getViewObject());
if (!viewPart ||
!viewSection) {
if (!viewPart) {
return;
}
if (!viewSection->hasGeometry()) {
return;
}
@@ -614,6 +625,7 @@ void QGIViewPart::drawSectionLine(TechDraw::DrawViewSection* viewSection, bool b
return;
}
if (b) {
QGISectionLine* sectionLine = new QGISectionLine();
addToGroup(sectionLine);
@@ -679,7 +691,7 @@ void QGIViewPart::drawCenterLines(bool b)
if (!viewPart) {
return;
}
auto vp = static_cast<ViewProviderViewPart*>(getViewProvider(getViewObject()));
if ( vp == nullptr ) {
return;
@@ -731,7 +743,7 @@ void QGIViewPart::drawHighlight(TechDraw::DrawViewDetail* viewDetail, bool b)
!viewDetail) {
return;
}
if (!viewDetail->hasGeometry()) {
return;
}
@@ -785,7 +797,7 @@ void QGIViewPart::drawMatting()
void QGIViewPart::pathArc(QPainterPath &path, double rx, double ry, double x_axis_rotation,
bool large_arc_flag, bool sweep_flag,
double x, double y,
double curx, double cury)
double curx, double cury)
{
double sin_th, cos_th;
double a00, a01, a10, a11;

View File

@@ -60,6 +60,7 @@ public:
virtual void updateView(bool update = false) override;
void tidy();
virtual QRectF boundingRect() const override;
virtual void drawAllSectionLines(void);
virtual void drawSectionLine(TechDraw::DrawViewSection* s, bool b);
virtual void drawCenterLines(bool b);
virtual void drawHighlight(TechDraw::DrawViewDetail* viewDetail, bool b);

View File

@@ -94,6 +94,12 @@ ViewProviderViewPart::~ViewProviderViewPart()
void ViewProviderViewPart::updateData(const App::Property* prop)
{
if (prop == &(getViewObject()->Scale) ) { //shouldn't Scale cause DVP::execute & request paint??
QGIView* qgiv = getQView();
if (qgiv) {
qgiv->updateView(true);
}
}
ViewProviderDrawingView::updateData(prop);
}