def getRoundPath(begin, center, close, end, radius, sidesPerRadian): "Get round path." beginComplex = begin.dropAxis() centerComplex = center.dropAxis() endComplex = end.dropAxis() beginComplexSegmentLength = abs(centerComplex - beginComplex) endComplexSegmentLength = abs(centerComplex - endComplex) minimumRadius = lineation.getMinimumRadius(beginComplexSegmentLength, endComplexSegmentLength, radius) if minimumRadius <= close: return [center] beginBevel = center + minimumRadius / beginComplexSegmentLength * (begin - center) endBevel = center + minimumRadius / endComplexSegmentLength * (end - center) beginBevelComplex = beginBevel.dropAxis() endBevelComplex = endBevel.dropAxis() midpointComplex = 0.5 * (beginBevelComplex + endBevelComplex) if radius < 0.0: centerComplex = midpointComplex + midpointComplex - centerComplex midpointMinusCenterComplex = midpointComplex - centerComplex midpointCenterLength = abs(midpointMinusCenterComplex) midpointEndLength = abs(midpointComplex - endBevelComplex) midpointCircleCenterLength = midpointEndLength * midpointEndLength / midpointCenterLength circleRadius = math.sqrt(midpointCircleCenterLength * midpointCircleCenterLength + midpointEndLength * midpointEndLength) circleCenterComplex = midpointComplex + midpointMinusCenterComplex * midpointCircleCenterLength / midpointCenterLength circleCenter = Vector3(circleCenterComplex.real, circleCenterComplex.imag, center.z) endMinusCircleCenterComplex = endBevelComplex - circleCenterComplex beginMinusCircleCenter = beginBevel - circleCenter beginMinusCircleCenterComplex = beginMinusCircleCenter.dropAxis() angleDifference = euclidean.getAngleDifferenceByComplex( endMinusCircleCenterComplex, beginMinusCircleCenterComplex) steps = int(math.ceil(abs(angleDifference) * sidesPerRadian)) stepPlaneAngle = euclidean.getWiddershinsUnitPolar(angleDifference / float(steps)) deltaZStep = (end.z - begin.z) / float(steps) roundPath = [beginBevel] for step in xrange(1, steps): beginMinusCircleCenterComplex = beginMinusCircleCenterComplex * stepPlaneAngle arcPointComplex = circleCenterComplex + beginMinusCircleCenterComplex arcPoint = Vector3(arcPointComplex.real, arcPointComplex.imag, begin.z + deltaZStep * step) roundPath.append(arcPoint) return roundPath + [endBevel]
def getBevelPath( begin, center, close, end, radius ): "Get bevel path." beginComplex = begin.dropAxis() centerComplex = center.dropAxis() endComplex = end.dropAxis() beginComplexSegmentLength = abs( centerComplex - beginComplex ) endComplexSegmentLength = abs( centerComplex - endComplex ) minimumRadius = lineation.getMinimumRadius( beginComplexSegmentLength, endComplexSegmentLength, radius ) if minimumRadius <= close: return [ center ] beginBevel = center + minimumRadius / beginComplexSegmentLength * ( begin - center ) endBevel = center + minimumRadius / endComplexSegmentLength * ( end - center ) if radius > 0.0: return [ beginBevel, endBevel ] midpointComplex = 0.5 * ( beginBevel.dropAxis() + endBevel.dropAxis() ) spikeComplex = centerComplex + centerComplex - midpointComplex return [ beginBevel, Vector3( spikeComplex.real, spikeComplex.imag, center.z ), endBevel ]
def getBevelPath( begin, center, close, end, radius ): "Get bevel path." beginComplex = begin.dropAxis() centerComplex = center.dropAxis() endComplex = end.dropAxis() beginComplexSegmentLength = abs( centerComplex - beginComplex ) endComplexSegmentLength = abs( centerComplex - endComplex ) minimumRadius = lineation.getMinimumRadius( beginComplexSegmentLength, endComplexSegmentLength, radius ) if minimumRadius <= close: return [ center ] beginBevel = center + minimumRadius / beginComplexSegmentLength * ( begin - center ) endBevel = center + minimumRadius / endComplexSegmentLength * ( end - center ) if radius > 0.0: return [ beginBevel, endBevel ] midpointComplex = 0.5 * ( beginBevel.dropAxis() + endBevel.dropAxis() ) spikeComplex = centerComplex + centerComplex - midpointComplex return [ beginBevel, Vector3( spikeComplex.real, spikeComplex.imag, center.z ), endBevel ]
def getRoundPath(begin, center, close, end, radius, sidesPerRadian): "Get round path." beginComplex = begin.dropAxis() centerComplex = center.dropAxis() endComplex = end.dropAxis() beginComplexSegmentLength = abs(centerComplex - beginComplex) endComplexSegmentLength = abs(centerComplex - endComplex) minimumRadius = lineation.getMinimumRadius(beginComplexSegmentLength, endComplexSegmentLength, radius) if minimumRadius <= close: return [center] beginBevel = center + minimumRadius / beginComplexSegmentLength * (begin - center) endBevel = center + minimumRadius / endComplexSegmentLength * (end - center) beginBevelComplex = beginBevel.dropAxis() endBevelComplex = endBevel.dropAxis() midpointComplex = 0.5 * (beginBevelComplex + endBevelComplex) if radius < 0.0: centerComplex = midpointComplex + midpointComplex - centerComplex midpointMinusCenterComplex = midpointComplex - centerComplex midpointCenterLength = abs(midpointMinusCenterComplex) midpointEndLength = abs(midpointComplex - endBevelComplex) midpointCircleCenterLength = midpointEndLength * midpointEndLength / midpointCenterLength circleRadius = math.sqrt( midpointCircleCenterLength * midpointCircleCenterLength + midpointEndLength * midpointEndLength ) circleCenterComplex = ( midpointComplex + midpointMinusCenterComplex * midpointCircleCenterLength / midpointCenterLength ) circleCenter = Vector3(circleCenterComplex.real, circleCenterComplex.imag, center.z) endMinusCircleCenterComplex = endBevelComplex - circleCenterComplex beginMinusCircleCenter = beginBevel - circleCenter beginMinusCircleCenterComplex = beginMinusCircleCenter.dropAxis() angleDifference = euclidean.getAngleDifferenceByComplex(endMinusCircleCenterComplex, beginMinusCircleCenterComplex) steps = int(math.ceil(abs(angleDifference) * sidesPerRadian)) stepPlaneAngle = euclidean.getWiddershinsUnitPolar(angleDifference / float(steps)) deltaZStep = (end.z - begin.z) / float(steps) roundPath = [beginBevel] for step in xrange(1, steps): beginMinusCircleCenterComplex = beginMinusCircleCenterComplex * stepPlaneAngle arcPointComplex = circleCenterComplex + beginMinusCircleCenterComplex arcPoint = Vector3(arcPointComplex.real, arcPointComplex.imag, begin.z + deltaZStep * step) roundPath.append(arcPoint) return roundPath + [endBevel]