int MgArc::_getDimensions(const Matrix2d& m2w, float* vars, char* types, int count) const { int ret = 0; if (count > ret) { types[ret] = 'r'; vars[ret++] = fabsf(getRadius() * m2w.m11); } if (count > ret) { types[ret] = 'a'; vars[ret++] = mgRad2Deg(mgTo0_2PI(getSweepAngle() * (m2w.m22 < 0 ? -1.f : 1.f))); } return ret; }
bool MgCmdDrawLines::canAddPoint(const MgMotion* sender, bool ended) { float minDist = mgDisplayMmToModel(3, sender); Point2d endPt = m_shape->shape()->getPoint(m_step - 1); float distToEnd = endPt.distanceTo(sender->pointM); float turnAngle = 90; if (m_step > 1) { Point2d lastPt = m_shape->shape()->getPoint(m_step - 2); turnAngle = (endPt - lastPt).angleTo(sender->pointM - endPt); turnAngle = mgRad2Deg(fabs(turnAngle)); } if (distToEnd < minDist * (ended ? 0.25 : 1)) return false; if (!ended && sin(turnAngle) * distToEnd < 5) return false; return true; }