def getArcPath(elementNode): "Get the arc path.rx ry x-axis-rotation large-arc-flag sweep-flag" begin = elementNode.getPreviousVertex(Vector3()) end = evaluate.getVector3FromElementNode(elementNode) largeArcFlag = evaluate.getEvaluatedBoolean(True, elementNode, 'largeArcFlag') radius = lineation.getComplexByPrefix(elementNode, 'radius', complex(1.0, 1.0)) sweepFlag = evaluate.getEvaluatedBoolean(True, elementNode, 'sweepFlag') xAxisRotation = math.radians( evaluate.getEvaluatedFloat(0.0, elementNode, 'xAxisRotation')) arcComplexes = svg_reader.getArcComplexes(begin.dropAxis(), end.dropAxis(), largeArcFlag, radius, sweepFlag, xAxisRotation) path = [] if len(arcComplexes) < 1: return [] incrementZ = (end.z - begin.z) / float(len(arcComplexes)) z = begin.z for pointIndex in xrange(len(arcComplexes)): pointComplex = arcComplexes[pointIndex] z += incrementZ path.append(Vector3(pointComplex.real, pointComplex.imag, z)) if len(path) > 0: path[-1] = end return path
def getCubicPath(elementNode): "Get the cubic path." end = evaluate.getVector3FromElementNode(elementNode) previousElementNode = elementNode.getPreviousElementNode() if previousElementNode is None: print('Warning, can not get previousElementNode in getCubicPath in cubic for:') print(elementNode) return [end] begin = elementNode.getPreviousVertex(Vector3()) evaluatedControlPoints = evaluate.getTransformedPathByKey([], elementNode, 'controlPoints') if len(evaluatedControlPoints) > 1: return getCubicPathByBeginEnd(begin, evaluatedControlPoints, elementNode, end) controlPoint0 = evaluate.getVector3ByPrefix(None, elementNode, 'controlPoint0') controlPoint1 = evaluate.getVector3ByPrefix(None, elementNode, 'controlPoint1') if len(evaluatedControlPoints) == 1: controlPoint1 = evaluatedControlPoints[0] if controlPoint0 is None: oldControlPoint = evaluate.getVector3ByPrefixes(previousElementNode, ['controlPoint','controlPoint1'], None) if oldControlPoint is None: oldControlPoints = evaluate.getTransformedPathByKey([], previousElementNode, 'controlPoints') if len(oldControlPoints) > 0: oldControlPoint = oldControlPoints[-1] if oldControlPoint is None: oldControlPoint = end controlPoint0 = begin + begin - oldControlPoint return getCubicPathByBeginEnd(begin, [controlPoint0, controlPoint1], elementNode, end)
def getQuadraticPath(elementNode): "Get the quadratic path." end = evaluate.getVector3FromElementNode(elementNode) previousElementNode = elementNode.getPreviousElementNode() if previousElementNode == None: print('Warning, can not get previousElementNode in getQuadraticPath in quadratic for:') print(elementNode) return [end] begin = elementNode.getPreviousVertex(Vector3()) controlPoint = evaluate.getVector3ByPrefix(None, elementNode, 'controlPoint') if controlPoint == None: oldControlPoint = evaluate.getVector3ByPrefixes(previousElementNode, ['controlPoint','controlPoint1'], None) if oldControlPoint == None: oldControlPoint = end controlPoint = begin + begin - oldControlPoint evaluate.addVector3ToElementNode(elementNode, 'controlPoint', controlPoint) return svg_reader.getQuadraticPoints(begin, controlPoint, end, lineation.getNumberOfBezierPoints(begin, elementNode, end))
def getArcPath(elementNode): "Get the arc path.rx ry x-axis-rotation large-arc-flag sweep-flag" begin = elementNode.getPreviousVertex(Vector3()) end = evaluate.getVector3FromElementNode(elementNode) largeArcFlag = evaluate.getEvaluatedBoolean(True, elementNode, 'largeArcFlag') radius = lineation.getComplexByPrefix(elementNode, 'radius', complex(1.0, 1.0)) sweepFlag = evaluate.getEvaluatedBoolean(True, elementNode, 'sweepFlag') xAxisRotation = math.radians(evaluate.getEvaluatedFloat(0.0, elementNode, 'xAxisRotation')) arcComplexes = svg_reader.getArcComplexes(begin.dropAxis(), end.dropAxis(), largeArcFlag, radius, sweepFlag, xAxisRotation) path = [] if len(arcComplexes) < 1: return [] incrementZ = (end.z - begin.z) / float(len(arcComplexes)) z = begin.z for pointIndex in xrange(len(arcComplexes)): pointComplex = arcComplexes[pointIndex] z += incrementZ path.append(Vector3(pointComplex.real, pointComplex.imag, z)) if len(path) > 0: path[-1] = end return path
def processElementNode(elementNode): "Process the xml element." elementNode.parentNode.xmlObject.vertexes.append(evaluate.getVector3FromElementNode(elementNode))