| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #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; |
| | } |
| |
|