| 78 | } |
| 79 | |
| 80 | Primitives::ConeSegment Primitives::ConeSegment::untruncateCone() const |
| 81 | { |
| 82 | bool isCone = !isCircle() && positiveSideRadius != negativeSideRadius; |
| 83 | assert( isCone ); |
| 84 | if ( !isCone ) |
| 85 | return *this; // Not a cone. |
| 86 | |
| 87 | if ( positiveSideRadius == 0 || negativeSideRadius == 0 ) |
| 88 | return *this; // Already truncated. |
| 89 | |
| 90 | ConeSegment ret = *this; |
| 91 | |
| 92 | float shift = std::min( positiveSideRadius, negativeSideRadius ) * length() / std::abs( positiveSideRadius - negativeSideRadius ); |
| 93 | ( positiveSideRadius < negativeSideRadius ? ret.positiveLength : ret.negativeLength ) += shift; |
| 94 | return ret; |
| 95 | } |
| 96 | |
| 97 | Primitives::ConeSegment Primitives::ConeSegment::axis() const |
| 98 | { |