示例#1
0
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;
}
示例#2
0
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;
}