| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #include<iostream> |
| #include "rs_dimdiametric.h" |
|
|
| #include "rs_debug.h" |
| #include "rs_graphic.h" |
| #include "rs_settings.h" |
| #include "rs_units.h" |
|
|
| RS_DimDiametricData::RS_DimDiametricData(): |
| definitionPoint(false), |
| leader(0.0) { |
| } |
|
|
| |
| |
| |
| |
| |
| |
| RS_DimDiametricData::RS_DimDiametricData(const RS_Vector& _definitionPoint, |
| double _leader): |
| definitionPoint(_definitionPoint) |
| ,leader(_leader){ |
| } |
|
|
| std::ostream& operator << (std::ostream& os, |
| const RS_DimDiametricData& dd) { |
| os << "(" << dd.definitionPoint << "," << dd.leader << ")"; |
| return os; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| RS_DimDiametric::RS_DimDiametric(RS_EntityContainer* parent, |
| const RS_DimensionData& d, |
| const RS_DimDiametricData& ed) |
| : RS_Dimension(parent, d), m_dimDiametricData(ed) { |
| } |
|
|
| RS_DimDiametric::RS_DimDiametric(const RS_DimDiametric& other) |
| : RS_Dimension(other), m_dimDiametricData(other.m_dimDiametricData) { |
| } |
|
|
| RS_Entity* RS_DimDiametric::clone() const { |
| auto* d = new RS_DimDiametric(*this); |
| return d; |
| } |
|
|
| |
| |
| |
| |
| QString RS_DimDiametric::getMeasuredLabel() { |
| |
| double distance = m_dimGenericData.definitionPoint.distanceTo(m_dimDiametricData.definitionPoint) * getGeneralFactor(); |
| double dist = prepareLabelLinearDistance(distance); |
| QString measuredLabel = createLinearMeasuredLabel(dist); |
| return measuredLabel; |
| } |
|
|
| RS_VectorSolutions RS_DimDiametric::getRefPoints() const { |
| return RS_VectorSolutions({ |
| m_dimDiametricData.definitionPoint, |
| m_dimGenericData.definitionPoint, m_dimGenericData.middleOfText |
| }); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| void RS_DimDiametric::doUpdateDim() { |
| RS_DEBUG->print("RS_DimDiametric::update"); |
| |
| |
| createDimensionLine(m_dimGenericData.definitionPoint, m_dimDiametricData.definitionPoint, |
| true, true, true, true, m_dimGenericData.autoText); |
| } |
|
|
| void RS_DimDiametric::move(const RS_Vector& offset) { |
| RS_Dimension::move(offset); |
|
|
| m_dimDiametricData.definitionPoint.move(offset); |
| update(); |
| } |
|
|
| void RS_DimDiametric::rotate(const RS_Vector& center, double angle) { |
| rotate(center,RS_Vector(angle)); |
| } |
|
|
| void RS_DimDiametric::rotate(const RS_Vector& center, const RS_Vector& angleVector) { |
| RS_Dimension::rotate(center, angleVector); |
|
|
| m_dimDiametricData.definitionPoint.rotate(center, angleVector); |
| update(); |
| } |
|
|
| void RS_DimDiametric::scale(const RS_Vector& center, const RS_Vector& factor) { |
| RS_Dimension::scale(center, factor); |
|
|
| m_dimDiametricData.definitionPoint.scale(center, factor); |
| m_dimDiametricData.leader*=factor.x; |
| update(); |
| } |
|
|
| void RS_DimDiametric::mirror(const RS_Vector& axisPoint1, const RS_Vector& axisPoint2) { |
| RS_Dimension::mirror(axisPoint1, axisPoint2); |
|
|
| m_dimDiametricData.definitionPoint.mirror(axisPoint1, axisPoint2); |
| update(); |
| } |
|
|
| void RS_DimDiametric::moveRef(const RS_Vector& ref, const RS_Vector& offset) { |
| if (ref.distanceTo(m_dimDiametricData.definitionPoint) < 1.0e-4) { |
| RS_Vector c = (m_dimDiametricData.definitionPoint + m_dimGenericData.definitionPoint) / 2.0; |
| double d = c.distanceTo(m_dimDiametricData.definitionPoint); |
| double a = c.angleTo(m_dimDiametricData.definitionPoint + offset); |
|
|
| RS_Vector v = RS_Vector::polar(d, a); |
| m_dimDiametricData.definitionPoint = c + v; |
| m_dimGenericData.definitionPoint = c - v; |
| updateDim(true); |
| } |
| else if (ref.distanceTo(m_dimGenericData.definitionPoint) < 1.0e-4) { |
| RS_Vector c = (m_dimDiametricData.definitionPoint + m_dimGenericData.definitionPoint) / 2.0; |
| double d = c.distanceTo(m_dimGenericData.definitionPoint); |
| double a = c.angleTo(m_dimGenericData.definitionPoint + offset); |
|
|
| RS_Vector v = RS_Vector::polar(d, a); |
| m_dimGenericData.definitionPoint = c + v; |
| m_dimDiametricData.definitionPoint = c - v; |
| updateDim(true); |
| } |
| else if (ref.distanceTo(m_dimGenericData.middleOfText) < 1.0e-4) { |
| m_dimGenericData.middleOfText.move(offset); |
| updateDim(false); |
| } |
| } |
|
|
| |
| |
| |
| std::ostream& operator << (std::ostream& os, const RS_DimDiametric& d) { |
| os << " DimDiametric: " << d.getData() << "\n" << d.getEData() << "\n"; |
| return os; |
| } |
|
|