QList<QSharedPointer<RShape> > RDimAlignedData::getShapes(const RBox& queryBox, bool ignoreComplex) const { Q_UNUSED(queryBox) Q_UNUSED(ignoreComplex) QSharedPointer<RBlockReferenceEntity> dimBlockReference = getDimensionBlockReference(); if (!dimBlockReference.isNull()) { return dimBlockReference->getShapes(queryBox, ignoreComplex); } QList<QSharedPointer<RShape> > ret; double dimexo = getDimexo(); double dimexe = getDimexe(); RLine extensionLine(extensionPoint1, extensionPoint2); // angle from extension endpoints towards dimension line double extAngle = extensionPoint1.getAngleTo(extensionPoint2); RS::Side side = extensionLine.getSideOfPoint(definitionPoint); if (side==RS::RightHand) { extAngle -= M_PI/2.0; } else { extAngle += M_PI/2.0; } // extension lines length double extLength = extensionLine.getDistanceTo(definitionPoint, false); RVector v1, v2, e1; RLine line; // from entity to inner point of extension line: v1.setPolar(dimexo, extAngle); // from entity to outer point of extension line: v2.setPolar(dimexe, extAngle); e1.setPolar(1.0, extAngle); refDefinitionPoint1 = extensionPoint1 + e1*extLength; refDefinitionPoint2 = extensionPoint2 + e1*extLength; definitionPoint = refDefinitionPoint1; // extension line 1: line = RLine(extensionPoint1 + v1, extensionPoint1 + e1*extLength + v2); ret.append(QSharedPointer<RLine>(new RLine(line))); // extension line 2: line = RLine(extensionPoint2 + v1, extensionPoint2 + e1*extLength + v2); ret.append(QSharedPointer<RLine>(new RLine(line))); // dimension line: ret.append(getDimensionLineShapes( extensionPoint1 + e1*extLength, extensionPoint2 + e1*extLength, true, true)); return ret; }
QList<QSharedPointer<RShape> > RDimDiametricData::getShapes(const RBox& queryBox, bool ignoreComplex) const { Q_UNUSED(queryBox) Q_UNUSED(ignoreComplex) QList<QSharedPointer<RShape> > ret; // dimension line: ret.append(getDimensionLineShapes( chordPoint, definitionPoint, true, true)); return ret; }
QList<QSharedPointer<RShape> > RDimDiametricData::getShapes(const RBox& queryBox, bool ignoreComplex) const { Q_UNUSED(queryBox) Q_UNUSED(ignoreComplex) QSharedPointer<RBlockReferenceEntity> dimBlockReference = getDimensionBlockReference(); if (!dimBlockReference.isNull()) { return dimBlockReference->getShapes(queryBox, ignoreComplex); } QList<QSharedPointer<RShape> > ret; // dimension line: ret.append(getDimensionLineShapes( chordPoint, definitionPoint, true, true)); return ret; }
QList<QSharedPointer<RShape> > RDimRotatedData::getShapes(const RBox& queryBox, bool ignoreComplex) const { Q_UNUSED(queryBox) Q_UNUSED(ignoreComplex) QList<QSharedPointer<RShape> > ret; double dimexo = getDimexo(); double dimexe = getDimexe(); QList<RVector> l = getDimPoints(); RVector dimP1 = l.at(0); RVector dimP2 = l.at(1); // definitive dimension line: ret += getDimensionLineShapes(dimP1, dimP2, true, true); // extension lines: RVector vDimexo1, vDimexe1, vDimexo2, vDimexe2; if (!extensionPoint1.equalsFuzzy(dimP1)) { double a1 = extensionPoint1.getAngleTo(dimP1); vDimexe1.setPolar(dimexe, a1); vDimexo1.setPolar(dimexo, a1); RLine line(extensionPoint1+vDimexo1, dimP1+vDimexe1); ret.append(QSharedPointer<RLine>(new RLine(line))); } if (!extensionPoint2.equalsFuzzy(dimP2)) { double a2 = extensionPoint2.getAngleTo(dimP2); vDimexe2.setPolar(dimexe, a2); vDimexo2.setPolar(dimexo, a2); RLine line(extensionPoint2+vDimexo2, dimP2+vDimexe2); ret.append(QSharedPointer<RLine>(new RLine(line))); } return ret; }