]> Shamusworld >> Repos - architektonas/blobdiff - src/base/rs_dimension.cpp
Changed RS_Graphic to Drawing; this is less confusing as a drawing is
[architektonas] / src / base / rs_dimension.cpp
index e99f2990910f25dbb8b15c839c078d3277e567aa..01097c6c6f443ce8ca1a77b21e1815ed81604015 100644 (file)
@@ -38,12 +38,12 @@ RS_DimensionData RS_Dimension::getData() const
 
 Vector RS_Dimension::getNearestRef(const Vector & coord, double * dist)
 {
-    return RS_Entity::getNearestRef(coord, dist);
+       return RS_Entity::getNearestRef(coord, dist);
 }
 
 Vector RS_Dimension::getNearestSelectedRef(const Vector & coord, double * dist)
 {
-    return RS_Entity::getNearestSelectedRef(coord, dist);
+       return RS_Entity::getNearestSelectedRef(coord, dist);
 }
 
 /**
@@ -56,29 +56,25 @@ Vector RS_Dimension::getNearestSelectedRef(const Vector & coord, double * dist)
  */
 QString RS_Dimension::getLabel(bool resolve)
 {
-       if (!resolve) {
+       if (!resolve)
                return data.text;
-       }
-
-    QString ret="";
-
-    // One space suppresses the text:
-    if (data.text==" ") {
-        ret = "";
-    }
 
-    // No text prints actual measurement:
-    else if (data.text=="") {
-        ret = getMeasuredLabel();
-    }
+       QString ret = "";
 
-    // Others print the text (<> is replaced by the measurement)
-    else {
-        ret = data.text;
-        ret = ret.replace(QString("<>"), getMeasuredLabel());
-    }
+       // One space suppresses the text:
+       if (data.text == " ")
+               ret = "";
+       // No text prints actual measurement:
+       else if (data.text == "")
+               ret = getMeasuredLabel();
+       // Others print the text (<> is replaced by the measurement)
+       else
+       {
+               ret = data.text;
+               ret = ret.replace(QString("<>"), getMeasuredLabel());
+       }
 
-    return ret;
+       return ret;
 }
 
 /**
@@ -94,123 +90,125 @@ void RS_Dimension::setLabel(const QString & l)
  *
  * @param forceAutoText Automatically reposition the text label.
  */
-void RS_Dimension::updateCreateDimensionLine(const Vector& p1,
-        const Vector& p2, bool arrow1, bool arrow2, bool forceAutoText)
+void RS_Dimension::updateCreateDimensionLine(const Vector & p1,
+       const Vector & p2, bool arrow1, bool arrow2, bool forceAutoText)
 {
-    // text height (DIMTXT)
-    double dimtxt = getTextHeight();
-    // text distance to line (DIMGAP)
-    double dimgap = getDimensionLineGap();
-
-    // length of dimension line:
-    double distance = p1.distanceTo(p2);
-
-    // do we have to put the arrows outside of the line?
-    bool outsideArrows = (distance<getArrowSize()*2.5);
-
-    // arrow angles:
-    double arrowAngle1, arrowAngle2;
-
-    // Create dimension line:
-    RS_Line* dimensionLine = new RS_Line(this, RS_LineData(p1, p2));
-    dimensionLine->setPen(RS_Pen(RS2::FlagInvalid));
-    dimensionLine->setLayer(NULL);
-    addEntity(dimensionLine);
-
-    if (outsideArrows==false) {
-        arrowAngle1 = dimensionLine->getAngle2();
-        arrowAngle2 = dimensionLine->getAngle1();
-    } else {
-        arrowAngle1 = dimensionLine->getAngle1();
-        arrowAngle2 = dimensionLine->getAngle2();
-
-        // extend dimension line outside arrows
-        Vector dir;
-        dir.setPolar(getArrowSize()*2, arrowAngle2);
-        dimensionLine->setStartpoint(p1 + dir);
-        dimensionLine->setEndpoint(p2 - dir);
-    }
-
-    // Arrows:
-    RS_SolidData sd;
-    RS_Solid* arrow;
-
-    if (arrow1) {
-        // arrow 1
-        arrow = new RS_Solid(this, sd);
-        arrow->shapeArrow(p1,
-                          arrowAngle1,
-                          getArrowSize());
-        arrow->setPen(RS_Pen(RS2::FlagInvalid));
-        arrow->setLayer(NULL);
-        addEntity(arrow);
-    }
-
-    if (arrow2) {
-        // arrow 2:
-        arrow = new RS_Solid(this, sd);
-        arrow->shapeArrow(p2,
-                          arrowAngle2,
-                          getArrowSize());
-        arrow->setPen(RS_Pen(RS2::FlagInvalid));
-        arrow->setLayer(NULL);
-        addEntity(arrow);
-    }
-
-    // Text label:
-    RS_TextData textData;
-    Vector textPos;
+       // text height (DIMTXT)
+       double dimtxt = getTextHeight();
+       // text distance to line (DIMGAP)
+       double dimgap = getDimensionLineGap();
+
+       // length of dimension line:
+       double distance = p1.distanceTo(p2);
+
+       // do we have to put the arrows outside of the line?
+       bool outsideArrows = (distance<getArrowSize()*2.5);
+
+       // arrow angles:
+       double arrowAngle1, arrowAngle2;
+
+       // Create dimension line:
+       RS_Line * dimensionLine = new RS_Line(this, RS_LineData(p1, p2));
+       dimensionLine->setPen(RS_Pen(RS2::FlagInvalid));
+       dimensionLine->setLayer(NULL);
+       addEntity(dimensionLine);
+
+       if (outsideArrows == false)
+       {
+               arrowAngle1 = dimensionLine->getAngle2();
+               arrowAngle2 = dimensionLine->getAngle1();
+       }
+       else
+       {
+               arrowAngle1 = dimensionLine->getAngle1();
+               arrowAngle2 = dimensionLine->getAngle2();
+
+               // extend dimension line outside arrows
+               Vector dir;
+               dir.setPolar(getArrowSize() * 2, arrowAngle2);
+               dimensionLine->setStartpoint(p1 + dir);
+               dimensionLine->setEndpoint(p2 - dir);
+       }
+
+       // Arrows:
+       RS_SolidData sd;
+       RS_Solid * arrow;
+
+       if (arrow1)
+       {
+               // arrow 1
+               arrow = new RS_Solid(this, sd);
+               arrow->shapeArrow(p1, arrowAngle1, getArrowSize());
+               arrow->setPen(RS_Pen(RS2::FlagInvalid));
+               arrow->setLayer(NULL);
+               addEntity(arrow);
+       }
+
+       if (arrow2)
+       {
+               // arrow 2:
+               arrow = new RS_Solid(this, sd);
+               arrow->shapeArrow(p2, arrowAngle2, getArrowSize());
+               arrow->setPen(RS_Pen(RS2::FlagInvalid));
+               arrow->setLayer(NULL);
+               addEntity(arrow);
+       }
+
+       // Text label:
+       RS_TextData textData;
+       Vector textPos;
 
        double dimAngle1 = dimensionLine->getAngle1();
        double textAngle;
-       bool corrected=false;
+       bool corrected = false;
        textAngle = RS_Math::makeAngleReadable(dimAngle1, true, &corrected);
 
-    if (data.middleOfText.valid && !forceAutoText) {
-        textPos = data.middleOfText;
-    } else {
-        textPos = dimensionLine->getMiddlepoint();
-
-        Vector distV;
-
-        // rotate text so it's readable from the bottom or right (ISO)
-        // quadrant 1 & 4
-        if (corrected) {
-            distV.setPolar(dimgap + dimtxt/2.0, dimAngle1-M_PI/2.0);
-        } else {
-            distV.setPolar(dimgap + dimtxt/2.0, dimAngle1+M_PI/2.0);
-        }
-
-        // move text away from dimension line:
-        textPos+=distV;
-        //// the next update should still be able to adjust this
-        ////   auto text position. leave it invalid
+       if (data.middleOfText.valid && !forceAutoText)
+       {
+               textPos = data.middleOfText;
+       }
+       else
+       {
+               textPos = dimensionLine->getMiddlepoint();
+
+               Vector distV;
+
+               // rotate text so it's readable from the bottom or right (ISO)
+               // quadrant 1 & 4
+               if (corrected)
+               {
+                       distV.setPolar(dimgap + dimtxt / 2.0, dimAngle1 - M_PI / 2.0);
+               }
+               else
+               {
+                       distV.setPolar(dimgap + dimtxt / 2.0, dimAngle1 + M_PI / 2.0);
+               }
+
+               // move text away from dimension line:
+               textPos += distV;
+               //// the next update should still be able to adjust this
+               ////   auto text position. leave it invalid
                data.middleOfText = textPos;
-    }
-
-    textData = RS_TextData(textPos,
-                           dimtxt, 30.0,
-                           RS2::VAlignMiddle,
-                           RS2::HAlignCenter,
-                           RS2::LeftToRight,
-                           RS2::Exact,
-                           1.0,
-                           getLabel(),
-                           "standard",
-                           textAngle);
-
-    RS_Text* text = new RS_Text(this, textData);
-
-    // move text to the side:
-    Vector distH;
-    if (text->getUsedTextWidth()>distance) {
-        distH.setPolar(text->getUsedTextWidth()/2.0
-                       +distance/2.0+dimgap, textAngle);
-        text->move(distH);
-    }
-    text->setPen(RS_Pen(RS2::FlagInvalid));
-    text->setLayer(NULL);
-    addEntity(text);
+       }
+
+       textData = RS_TextData(textPos, dimtxt, 30.0, RS2::VAlignMiddle, RS2::HAlignCenter,
+               RS2::LeftToRight, RS2::Exact, 1.0, getLabel(), "standard", textAngle);
+
+       RS_Text * text = new RS_Text(this, textData);
+
+       // move text to the side:
+       Vector distH;
+
+       if (text->getUsedTextWidth() > distance)
+       {
+               distH.setPolar(text->getUsedTextWidth() / 2.0
+                       + distance / 2.0 + dimgap, textAngle);
+               text->move(distH);
+       }
+
+       text->setPen(RS_Pen(RS2::FlagInvalid));
+       text->setLayer(NULL);
+       addEntity(text);
 }
 
 Vector RS_Dimension::getDefinitionPoint()