3 // Part of the Architektonas Project
4 // Originally part of QCad Community Edition by Andrew Mustun
5 // Extensively rewritten and refactored by James L. Hammons
6 // Portions copyright (C) 2001-2003 RibbonSoft
7 // Copyright (C) 2010 Underground Software
8 // See the README and GPLv2 files for licensing and warranty information
10 // JLH = James L. Hammons <jlhamm@acm.org>
13 // --- ---------- -----------------------------------------------------------
14 // JLH 05/28/2010 Added this text. :-)
17 #include "dimdiametric.h"
27 * @para parent Parent Entity Container.
28 * @para d Common dimension geometrical data.
29 * @para ed Extended geometrical data for diametric dimension.
31 DimDiametric::DimDiametric(EntityContainer * parent, const DimensionData & d,
32 const DimDiametricData & ed): Dimension(parent, d), edata(ed)
37 /*virtual*/ DimDiametric::~DimDiametric()
41 /*virtual*/ Entity * DimDiametric::clone()
43 DimDiametric * d = new DimDiametric(*this);
44 #warning "!!! Need to deal with setAutoDelete() Qt3->Qt4 !!!"
45 // d->entities.setAutoDelete(entities.autoDelete());
51 /** @return RS2::EntityDimDiametric */
52 /*virtual*/ RS2::EntityType DimDiametric::rtti() const
54 return RS2::EntityDimDiametric;
58 * @return Copy of data that defines the diametric dimension.
61 DimDiametricData DimDiametric::getEData() const
67 * @return Automatically created label for the default
68 * measurement of this dimension.
70 QString DimDiametric::getMeasuredLabel()
72 // Definitive dimension line:
73 double dist = data.definitionPoint.distanceTo(edata.definitionPoint);
74 Drawing * drawing = GetDrawing();
77 return Units::formatLinear(dist, drawing->getUnit(),
78 drawing->getLinearFormat(), drawing->getLinearPrecision());
80 return QString("%1").arg(dist);
83 VectorSolutions DimDiametric::getRefPoints()
85 VectorSolutions ret(edata.definitionPoint, data.definitionPoint, data.middleOfText);
90 * Updates the sub entities of this dimension. Called when the
91 * dimension or the position, alignment, .. changes.
93 * @param autoText Automatically reposition the text label
95 void DimDiametric::update(bool autoText)
97 DEBUG->print("DimDiametric::update");
104 updateCreateDimensionLine(data.definitionPoint, edata.definitionPoint, true, true, autoText);
108 Vector DimDiametric::getDefinitionPoint()
110 return edata.definitionPoint;
113 double DimDiametric::getLeader()
118 void DimDiametric::move(Vector offset)
120 Dimension::move(offset);
122 edata.definitionPoint.move(offset);
126 void DimDiametric::rotate(Vector center, double angle)
128 Dimension::rotate(center, angle);
130 edata.definitionPoint.rotate(center, angle);
134 void DimDiametric::scale(Vector center, Vector factor) {
135 Dimension::scale(center, factor);
137 edata.definitionPoint.scale(center, factor);
138 edata.leader*=factor.x;
142 void DimDiametric::mirror(Vector axisPoint1, Vector axisPoint2) {
143 Dimension::mirror(axisPoint1, axisPoint2);
145 edata.definitionPoint.mirror(axisPoint1, axisPoint2);
149 void DimDiametric::moveRef(const Vector& ref, const Vector& offset)
151 if (ref.distanceTo(edata.definitionPoint)<1.0e-4) {
152 Vector c = (edata.definitionPoint + data.definitionPoint)/2.0;
153 double d = c.distanceTo(edata.definitionPoint);
154 double a = c.angleTo(edata.definitionPoint + offset);
158 edata.definitionPoint = c + v;
159 data.definitionPoint = c - v;
162 else if (ref.distanceTo(data.definitionPoint)<1.0e-4) {
163 Vector c = (edata.definitionPoint + data.definitionPoint)/2.0;
164 double d = c.distanceTo(data.definitionPoint);
165 double a = c.angleTo(data.definitionPoint + offset);
169 data.definitionPoint = c + v;
170 edata.definitionPoint = c - v;
173 else if (ref.distanceTo(data.middleOfText)<1.0e-4) {
174 data.middleOfText.move(offset);
180 * Dumps the point's data to stdout.
182 std::ostream & operator<<(std::ostream & os, const DimDiametric & d)
184 os << " DimDiametric: " << d.getData() << "\n" << d.getEData() << "\n";