bool RArcData::moveReferencePoint(const RVector& referencePoint, const RVector& targetPoint) { bool ret = false; if (referencePoint.equalsFuzzy(center)) { center = targetPoint; ret = true; } else if (referencePoint.equalsFuzzy(getStartPoint())) { moveStartPoint(targetPoint); ret = true; } else if (referencePoint.equalsFuzzy(getEndPoint())) { moveEndPoint(targetPoint); ret = true; } else if (referencePoint.equalsFuzzy(center + RVector(radius, 0)) || referencePoint.equalsFuzzy(center + RVector(0, radius)) || referencePoint.equalsFuzzy(center - RVector(radius, 0)) || referencePoint.equalsFuzzy(center - RVector(0, radius))) { radius = center.getDistanceTo(targetPoint); ret = true; } else if (referencePoint.equalsFuzzy(getMiddlePoint())) { moveMiddlePoint(targetPoint); ret = true; } return ret; }
bool REllipseData::moveReferencePoint(const RVector& referencePoint, const RVector& targetPoint) { RVector startPoint = getStartPoint(); RVector endPoint = getEndPoint(); if (!isFullEllipse()) { if (referencePoint.equalsFuzzy(startPoint)) { moveStartPoint(targetPoint, true); return true; } if (referencePoint.equalsFuzzy(endPoint)) { moveEndPoint(targetPoint, true); return true; } } if (referencePoint.equalsFuzzy(center+majorPoint)) { double minorRadius = getMinorRadius(); majorPoint = targetPoint-center; setRatio(minorRadius / getMajorRadius()); return true; } if (referencePoint.equalsFuzzy(center-majorPoint)) { double minorRadius = getMinorRadius(); majorPoint = -(targetPoint-center); setRatio(minorRadius / getMajorRadius()); return true; } if (referencePoint.equalsFuzzy(center+getMinorPoint())) { setMinorPoint(targetPoint-center); return true; } if (referencePoint.equalsFuzzy(center-getMinorPoint())) { setMinorPoint(-(targetPoint-center)); return true; } if (referencePoint.equalsFuzzy(center)) { center = targetPoint; return true; } return false; }
bool RArc::stretch(const RPolyline& area, const RVector& offset) { bool ret = false; if (area.contains(getStartPoint()) && area.contains(getEndPoint())) { return move(offset); } if (area.contains(getStartPoint())) { moveStartPoint(getStartPoint() + offset); ret = true; } else if (area.contains(getEndPoint())) { moveEndPoint(getEndPoint() + offset); ret = true; } return ret; }