Skip to content

Commit

Permalink
add scale hint to painter path exporter to account for viewport scale
Browse files Browse the repository at this point in the history
  • Loading branch information
qcad committed May 28, 2021
1 parent 8093dc3 commit 2d05f22
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 14 deletions.
4 changes: 2 additions & 2 deletions src/core/RPainterPathExporter.cpp
Expand Up @@ -29,8 +29,8 @@ void RPainterPathExporter::exportLineSegment(const RLine& line, double angle) {
else {
// Qt won't export a zero length line as point:
// e.g. dot in a dash/dot line:
RVector startPoint = line.startPoint - RVector::createPolar(0.01, angle);
RVector endPoint = line.endPoint + RVector::createPolar(0.01, angle);
RVector startPoint = line.startPoint - RVector::createPolar(0.01 * scaleHint, angle);
RVector endPoint = line.endPoint + RVector::createPolar(0.01 * scaleHint, angle);
path.moveTo(startPoint);
path.lineTo(endPoint);
// path.moveTo(line.getStartPoint()-RVector(0.01,0));
Expand Down
12 changes: 10 additions & 2 deletions src/core/RPainterPathExporter.h
Expand Up @@ -34,10 +34,10 @@
class QCADCORE_EXPORT RPainterPathExporter : public RExporter {
public:
RPainterPathExporter() :
RExporter(), exportZeroLinesAsPoints(true), ignoreZeroLines(false) { }
RExporter(), exportZeroLinesAsPoints(true), ignoreZeroLines(false), ignoreLineTypePatternScale(false), scaleHint(1.0) { }

RPainterPathExporter(RDocument& doc) :
RExporter(doc), exportZeroLinesAsPoints(true), ignoreZeroLines(false) { }
RExporter(doc), exportZeroLinesAsPoints(true), ignoreZeroLines(false), ignoreLineTypePatternScale(false), scaleHint(1.0) { }

virtual void exportLineSegment(const RLine& line, double angle = RNANDOUBLE);
virtual void exportPainterPaths(const QList<RPainterPath>& paths, double z = 0.0);
Expand Down Expand Up @@ -68,6 +68,13 @@ class QCADCORE_EXPORT RPainterPathExporter : public RExporter {
void setIgnoreLineTypePatternScale(bool on) {
ignoreLineTypePatternScale = on;
}
/**
* @brief setScaleHint Set additional pattern scale hint, used for scaling dots in patterns in viewports.
* @param s Factor (viewport scale)
*/
void setScaleHint(double s) {
scaleHint = s;
}

virtual double getLineTypePatternScale(const RLinetypePattern& p) const;

Expand All @@ -76,6 +83,7 @@ class QCADCORE_EXPORT RPainterPathExporter : public RExporter {
bool exportZeroLinesAsPoints;
bool ignoreZeroLines;
bool ignoreLineTypePatternScale;
double scaleHint;
};

#endif
30 changes: 20 additions & 10 deletions src/gui/RGraphicsSceneQt.cpp
Expand Up @@ -272,14 +272,23 @@ void RGraphicsSceneQt::transformAndApplyPatternPath(RPainterPath& path) const {
QList<QSharedPointer<RShape> > pathShapes = path.getShapes();

lp.scale(getLineTypePatternScale(lp));

// detect viewport context:
double scaleHint = 1.0;
RViewportEntity* vp = getCurrentViewport();
if (vp!=NULL) {
scaleHint = vp->getScale();
}

QPainterPath pathWithPattern;
RPainterPathExporter ppe(getDocument());
ppe.setPixelSizeHint(getPixelSizeHint());
ppe.setExportZeroLinesAsPoints(false);
ppe.setLinetypePattern(lp);
ppe.setIgnoreLineTypePatternScale(true);
ppe.setScaleHint(scaleHint);

if (path.getPolylineGen()) {
RPainterPathExporter ppe(getDocument());
ppe.setPixelSizeHint(getPixelSizeHint());
ppe.setExportZeroLinesAsPoints(false);
ppe.setLinetypePattern(lp);
ppe.setIgnoreLineTypePatternScale(true);

double length = 0.0;
for (int i=0; i<pathShapes.length(); i++) {
Expand All @@ -293,11 +302,12 @@ void RGraphicsSceneQt::transformAndApplyPatternPath(RPainterPath& path) const {
pathWithPattern.addPath(p);
}
else {
RPainterPathExporter ppe(getDocument());
ppe.setPixelSizeHint(getPixelSizeHint());
ppe.setExportZeroLinesAsPoints(false);
ppe.setLinetypePattern(lp);
ppe.setIgnoreLineTypePatternScale(true);
//RPainterPathExporter ppe(getDocument());
//ppe.setPixelSizeHint(getPixelSizeHint());
//ppe.setExportZeroLinesAsPoints(false);
//ppe.setLinetypePattern(lp);
//ppe.setIgnoreLineTypePatternScale(true);
//ppe.setScaleHint(scaleHint);

for (int i=0; i<pathShapes.length(); i++) {
//double length = 0.0;
Expand Down

0 comments on commit 2d05f22

Please sign in to comment.