]> Shamusworld >> Repos - architektonas/blobdiff - src/base/dimlinear.cpp
Major refactor of Architektonas: Jettisoning old cruft.
[architektonas] / src / base / dimlinear.cpp
diff --git a/src/base/dimlinear.cpp b/src/base/dimlinear.cpp
deleted file mode 100644 (file)
index 239d186..0000000
+++ /dev/null
@@ -1,333 +0,0 @@
-// dimlinear.cpp
-//
-// Part of the Architektonas Project
-// Originally part of QCad Community Edition by Andrew Mustun
-// Extensively rewritten and refactored by James L. Hammons
-// Portions copyright (C) 2001-2003 RibbonSoft
-// Copyright (C) 2010 Underground Software
-// See the README and GPLv2 files for licensing and warranty information
-//
-// JLH = James L. Hammons <jlhamm@acm.org>
-//
-// Who  When        What
-// ---  ----------  -----------------------------------------------------------
-// JLH  05/28/2010  Added this text. :-)
-//
-
-#include "dimlinear.h"
-
-#include "constructionline.h"
-#include "text.h"
-#include "solid.h"
-#include "drawing.h"
-#include "units.h"
-
-/**
- * Constructor.
- *
- * @para parent Parent Entity Container.
- * @para d Common dimension geometrical data.
- * @para ed Extended geometrical data for linear dimension.
- */
-DimLinear::DimLinear(EntityContainer * parent, const DimensionData & d,
-       const DimLinearData & ed): Dimension(parent, d), edata(ed)
-{
-    calculateBorders();
-}
-
-/*virtual*/ DimLinear::~DimLinear()
-{
-}
-
-/*virtual*/ Entity * DimLinear::clone()
-{
-       DimLinear * d = new DimLinear(*this);
-#warning "!!! Need to deal with setAutoDelete() Qt3->Qt4 !!!"
-//     d->entities.setAutoDelete(entities.autoDelete());
-       d->initId();
-       d->detach();
-
-       return d;
-}
-
-/**    @return RS2::EntityDimLinear */
-/*virtual*/ RS2::EntityType DimLinear::rtti() const
-{
-       return RS2::EntityDimLinear;
-}
-
-/**
- * @return Copy of data that defines the linear dimension.
- * @see getData()
- */
-DimLinearData DimLinear::getEData() const
-{
-       return edata;
-}
-
-VectorSolutions DimLinear::getRefPoints()
-{
-       VectorSolutions ret(edata.extensionPoint1, edata.extensionPoint2,
-               data.definitionPoint, data.middleOfText);
-
-       return ret;
-}
-
-/**
- * @return Automatically created label for the default
- * measurement of this dimension.
- */
-QString DimLinear::getMeasuredLabel()
-{
-       // direction of dimension line
-       Vector dirDim;
-       dirDim.setPolar(100.0, edata.angle);
-
-       // construction line for dimension line
-       ConstructionLine dimLine(NULL, ConstructionLineData(data.definitionPoint,
-               data.definitionPoint + dirDim));
-
-       Vector dimP1 = dimLine.getNearestPointOnEntity(edata.extensionPoint1);
-       Vector dimP2 = dimLine.getNearestPointOnEntity(edata.extensionPoint2);
-
-       // Definitive dimension line:
-       double dist = dimP1.distanceTo(dimP2);
-
-       Drawing * drawing = GetDrawing();
-
-       if (drawing)
-               return Units::formatLinear(dist, drawing->getUnit(),
-                       drawing->getLinearFormat(), drawing->getLinearPrecision());
-
-       return QString("%1").arg(dist);
-}
-
-bool DimLinear::hasEndpointsWithinWindow(Vector v1, Vector v2)
-{
-       return (edata.extensionPoint1.isInWindow(v1, v2)
-               || edata.extensionPoint2.isInWindow(v1, v2));
-}
-
-/**
- * Updates the sub entities of this dimension. Called when the
- * text or the position, alignment, .. changes.
- *
- * @param autoText Automatically reposition the text label
- */
-void DimLinear::update(bool autoText)
-{
-       DEBUG->print("DimLinear::update");
-
-       clear();
-
-       if (isUndone())
-               return;
-
-       // distance from entities (DIMEXO)
-       double dimexo = getExtensionLineOffset();
-       // extension line extension (DIMEXE)
-       double dimexe = getExtensionLineExtension();
-
-       LineData ld;
-       double extAngle = edata.angle + (M_PI / 2.0);
-
-       // direction of dimension line
-       Vector dirDim;
-       dirDim.setPolar(100.0, edata.angle);
-       // direction of extension lines
-       Vector dirExt;
-       dirExt.setPolar(100.0, extAngle);
-
-       // construction line for dimension line
-       ConstructionLine dimLine(NULL, ConstructionLineData(data.definitionPoint,
-               data.definitionPoint + dirDim));
-
-       Vector dimP1 = dimLine.getNearestPointOnEntity(edata.extensionPoint1);
-       Vector dimP2 = dimLine.getNearestPointOnEntity(edata.extensionPoint2);
-
-       // Definitive dimension line:
-       updateCreateDimensionLine(dimP1, dimP2, true, true, autoText);
-       /*
-       ld = LineData(data.definitionPoint, dimP1);
-       Line* dimensionLine = new Line(this, ld);
-               addEntity(dimensionLine);
-       */
-       Vector vDimexo1, vDimexe1, vDimexo2, vDimexe2;
-       vDimexe1.setPolar(dimexe, edata.extensionPoint1.angleTo(dimP1));
-       vDimexo1.setPolar(dimexo, edata.extensionPoint1.angleTo(dimP1));
-
-       vDimexe2.setPolar(dimexe, edata.extensionPoint2.angleTo(dimP2));
-       vDimexo2.setPolar(dimexo, edata.extensionPoint2.angleTo(dimP2));
-
-       if ((edata.extensionPoint1 - dimP1).magnitude() < 1e-6)
-       {
-               vDimexe1.setPolar(dimexe, data.definitionPoint.angleTo(dimP1) - M_PI / 2.0);
-               vDimexo1.setPolar(dimexo, data.definitionPoint.angleTo(dimP1) - M_PI / 2.0);
-       }
-
-       if ((edata.extensionPoint2 - dimP2).magnitude() < 1e-6)
-       {
-               vDimexe2.setPolar(dimexe, data.definitionPoint.angleTo(dimP2) - M_PI / 2.0);
-               vDimexo2.setPolar(dimexo, data.definitionPoint.angleTo(dimP2) - M_PI / 2.0);
-       }
-
-       // extension lines:
-       ld = LineData(edata.extensionPoint1 + vDimexo1, dimP1 + vDimexe1);
-       Line * line = new Line(this, ld);
-       line->setPen(Pen(RS2::FlagInvalid));
-       line->setLayer(NULL);
-       addEntity(line);
-
-       ld = LineData(edata.extensionPoint2 + vDimexo2, dimP2 + vDimexe2);
-       //data.definitionPoint+vDimexe2);
-       line = new Line(this, ld);
-       line->setPen(Pen(RS2::FlagInvalid));
-       line->setLayer(NULL);
-       addEntity(line);
-
-       calculateBorders();
-}
-
-Vector DimLinear::getExtensionPoint1()
-{
-       return edata.extensionPoint1;
-}
-
-Vector DimLinear::getExtensionPoint2()
-{
-       return edata.extensionPoint2;
-}
-
-double DimLinear::getAngle()
-{
-       return edata.angle;
-}
-
-void DimLinear::setAngle(double a)
-{
-       edata.angle = Math::correctAngle(a);
-}
-
-double DimLinear::getOblique()
-{
-       return edata.oblique;
-}
-
-void DimLinear::move(Vector offset)
-{
-       Dimension::move(offset);
-
-       edata.extensionPoint1.move(offset);
-       edata.extensionPoint2.move(offset);
-       update();
-}
-
-void DimLinear::rotate(Vector center, double angle)
-{
-       Dimension::rotate(center, angle);
-
-       edata.extensionPoint1.rotate(center, angle);
-       edata.extensionPoint2.rotate(center, angle);
-       edata.angle = Math::correctAngle(edata.angle+angle);
-       update();
-}
-
-void DimLinear::scale(Vector center, Vector factor)
-{
-       Dimension::scale(center, factor);
-
-       edata.extensionPoint1.scale(center, factor);
-       edata.extensionPoint2.scale(center, factor);
-       update();
-}
-
-void DimLinear::mirror(Vector axisPoint1, Vector axisPoint2)
-{
-       Dimension::mirror(axisPoint1, axisPoint2);
-
-       edata.extensionPoint1.mirror(axisPoint1, axisPoint2);
-       edata.extensionPoint2.mirror(axisPoint1, axisPoint2);
-
-       Vector vec;
-       vec.setPolar(1.0, edata.angle);
-       vec.mirror(Vector(0.0, 0.0), axisPoint2 - axisPoint1);
-       edata.angle = vec.angle();
-
-       update();
-}
-
-void DimLinear::stretch(Vector firstCorner, Vector secondCorner, Vector offset)
-{
-       //e->calculateBorders();
-       if (getMin().isInWindow(firstCorner, secondCorner)
-               && getMax().isInWindow(firstCorner, secondCorner))
-       {
-               move(offset);
-       }
-       else
-       {
-               //Vector v = data.definitionPoint - edata.extensionPoint2;
-               //double len = edata.extensionPoint2.distanceTo(data.definitionPoint);
-               //double ang1 = edata.extensionPoint1.angleTo(edata.extensionPoint2)
-               //              + M_PI/2;
-
-               if (edata.extensionPoint1.isInWindow(firstCorner, secondCorner))
-                       edata.extensionPoint1.move(offset);
-
-               if (edata.extensionPoint2.isInWindow(firstCorner, secondCorner))
-                       edata.extensionPoint2.move(offset);
-
-               /*
-               double ang2 = edata.extensionPoint1.angleTo(edata.extensionPoint2)
-                                               + M_PI/2;
-
-               double diff = Math::getAngleDifference(ang1, ang2);
-               if (diff>M_PI) {
-                       diff-=2*M_PI;
-               }
-
-               if (fabs(diff)>M_PI/2) {
-                       ang2 = Math::correctAngle(ang2+M_PI);
-               }
-
-               Vector v;
-               v.setPolar(len, ang2);
-               data.definitionPoint = edata.extensionPoint2 + v;
-               */
-       }
-
-       update(true);
-}
-
-void DimLinear::moveRef(const Vector & ref, const Vector & offset)
-{
-       if (ref.distanceTo(data.definitionPoint) < 1.0e-4)
-       {
-               data.definitionPoint += offset;
-               update(true);
-       }
-       else if (ref.distanceTo(data.middleOfText) < 1.0e-4)
-       {
-               data.middleOfText += offset;
-               update(false);
-       }
-       else if (ref.distanceTo(edata.extensionPoint1) < 1.0e-4)
-       {
-               edata.extensionPoint1 += offset;
-               update(true);
-       }
-       else if (ref.distanceTo(edata.extensionPoint2) < 1.0e-4)
-       {
-               edata.extensionPoint2 += offset;
-               update(true);
-       }
-}
-
-/**
- * Dumps the point's data to stdout.
- */
-std::ostream & operator<<(std::ostream & os, const DimLinear & d)
-{
-    os << " DimLinear: " << d.getData() << "\n" << d.getEData() << "\n";
-    return os;
-}