def getGeometryOutput(elementNode): 'Get vector3 vertexes from attribute dictionary.' derivation = GridDerivation(elementNode) diameter = derivation.radius + derivation.radius typeStringTwoCharacters = derivation.typeString.lower()[: 2] typeStringFirstCharacter = typeStringTwoCharacters[: 1] topRight = complex(derivation.demiwidth, derivation.demiheight) loopsComplex = [euclidean.getSquareLoopWiddershins(-topRight, topRight)] if len(derivation.target) > 0: loopsComplex = euclidean.getComplexPaths(derivation.target) maximumComplex = euclidean.getMaximumByComplexPaths(loopsComplex) minimumComplex = euclidean.getMinimumByComplexPaths(loopsComplex) gridPath = None if typeStringTwoCharacters == 'he': gridPath = getHexagonalGrid(diameter, loopsComplex, maximumComplex, minimumComplex, derivation.zigzag) elif typeStringTwoCharacters == 'ra' or typeStringFirstCharacter == 'a': gridPath = getRandomGrid(derivation, diameter, elementNode, loopsComplex, maximumComplex, minimumComplex) elif typeStringTwoCharacters == 're' or typeStringFirstCharacter == 'e': gridPath = getRectangularGrid(diameter, loopsComplex, maximumComplex, minimumComplex, derivation.zigzag) if gridPath == None: print('Warning, the step type was not one of (hexagonal, random or rectangular) in getGeometryOutput in grid for:') print(derivation.typeString) print(elementNode) return [] loop = euclidean.getVector3Path(gridPath) elementNode.attributes['closed'] = 'false' return lineation.getGeometryOutputByLoop(elementNode, lineation.SideLoop(loop, 0.5 * math.pi))
def getGeometryOutput(derivation, xmlElement): "Get vector3 vertexes from attribute dictionary." if derivation == None: derivation = GridDerivation() derivation.setToXMLElement(xmlElement) diameter = derivation.radius + derivation.radius typeStringTwoCharacters = derivation.typeString.lower()[: 2] typeStringFirstCharacter = typeStringTwoCharacters[: 1] topRight = complex(derivation.demiwidth, derivation.demiheight) bottomLeft = -topRight loopsComplex = [euclidean.getSquareLoopWiddershins(bottomLeft, topRight)] if len(derivation.target) > 0: loopsComplex = euclidean.getComplexPaths(derivation.target) maximumComplex = euclidean.getMaximumByPathsComplex(loopsComplex) minimumComplex = euclidean.getMinimumByPathsComplex(loopsComplex) gridPath = None if typeStringTwoCharacters == 'he': gridPath = getHexagonalGrid(diameter, loopsComplex, maximumComplex, minimumComplex, derivation.zigzag) elif typeStringTwoCharacters == 'ra' or typeStringFirstCharacter == 'a': gridPath = getRandomGrid(derivation, diameter, loopsComplex, maximumComplex, minimumComplex, xmlElement) elif typeStringTwoCharacters == 're' or typeStringFirstCharacter == 'e': gridPath = getRectangularGrid(diameter, loopsComplex, maximumComplex, minimumComplex, derivation.zigzag) if gridPath == None: print('Warning, the step type was not one of (hexagonal, random or rectangular) in getGeometryOutput in grid for:') print(derivation.typeString) print(xmlElement) return [] loop = euclidean.getVector3Path(gridPath) xmlElement.attributeDictionary['closed'] = 'false' return lineation.getGeometryOutputByLoop(lineation.SideLoop(loop, 0.5 * math.pi), xmlElement)
def getGeometryOutputByLoops(derivation, loops): 'Get geometry output by sorted, nested loops.' loops.sort(key=euclidean.getAreaVector3LoopAbsolute, reverse=True) complexLoops = euclidean.getComplexPaths(loops) nestedRings = [] for loopIndex, loop in enumerate(loops): complexLoop = complexLoops[loopIndex] leftPoint = euclidean.getLeftPoint(complexLoop) isInFilledRegion = euclidean.getIsInFilledRegion(complexLoops[: loopIndex] + complexLoops[loopIndex + 1 :], leftPoint) if isInFilledRegion == euclidean.isWiddershins(complexLoop): loop.reverse() nestedRing = euclidean.NestedRing() nestedRing.boundary = complexLoop nestedRing.vector3Loop = loop nestedRings.append(nestedRing) nestedRings = euclidean.getOrderedNestedRings(nestedRings) nestedRings = euclidean.getFlattenedNestedRings(nestedRings) portionDirections = getSpacedPortionDirections(derivation.interpolationDictionary) if len(nestedRings) < 1: return {} if len(nestedRings) == 1: geometryOutput = getGeometryOutputByNestedRing(derivation, nestedRings[0], portionDirections) return solid.getGeometryOutputByManipulation(geometryOutput, derivation.xmlElement) shapes = [] for nestedRing in nestedRings: shapes.append(getGeometryOutputByNestedRing(derivation, nestedRing, portionDirections)) return solid.getGeometryOutputByManipulation({'union' : {'shapes' : shapes}}, derivation.xmlElement)
def getGeometryOutput(elementNode): 'Get vector3 vertexes from attribute dictionary.' derivation = GridDerivation(elementNode) diameter = derivation.radius + derivation.radius typeStringTwoCharacters = derivation.typeString.lower()[:2] typeStringFirstCharacter = typeStringTwoCharacters[:1] topRight = derivation.inradius loopsComplex = [euclidean.getSquareLoopWiddershins(-topRight, topRight)] if len(derivation.target) > 0: loopsComplex = euclidean.getComplexPaths(derivation.target) maximumComplex = euclidean.getMaximumByComplexPaths(loopsComplex) minimumComplex = euclidean.getMinimumByComplexPaths(loopsComplex) gridPath = None if typeStringTwoCharacters == 'he': gridPath = getHexagonalGrid(diameter, loopsComplex, maximumComplex, minimumComplex, derivation.zigzag) elif typeStringTwoCharacters == 'ra' or typeStringFirstCharacter == 'a': gridPath = getRandomGrid(derivation, diameter, elementNode, loopsComplex, maximumComplex, minimumComplex) elif typeStringTwoCharacters == 're' or typeStringFirstCharacter == 'e': gridPath = getRectangularGrid(diameter, loopsComplex, maximumComplex, minimumComplex, derivation.zigzag) if gridPath == None: print( 'Warning, the step type was not one of (hexagonal, random or rectangular) in getGeometryOutput in grid for:' ) print(derivation.typeString) print(elementNode) return [] loop = euclidean.getVector3Path(gridPath) elementNode.attributes['closed'] = 'false' return lineation.getGeometryOutputByLoop( elementNode, lineation.SideLoop(loop, 0.5 * math.pi))
def getGeometryOutputByLoops(derivation, loops): 'Get geometry output by sorted, nested loops.' loops.sort(key=euclidean.getAreaVector3LoopAbsolute, reverse=True) complexLoops = euclidean.getComplexPaths(loops) nestedRings = [] for loopIndex, loop in enumerate(loops): complexLoop = complexLoops[loopIndex] leftPoint = euclidean.getLeftPoint(complexLoop) isInFilledRegion = euclidean.getIsInFilledRegion(complexLoops[: loopIndex] + complexLoops[loopIndex + 1 :], leftPoint) if isInFilledRegion == euclidean.isWiddershins(complexLoop): loop.reverse() nestedRing = euclidean.NestedRing() nestedRing.boundary = complexLoop nestedRing.vector3Loop = loop nestedRings.append(nestedRing) nestedRings = euclidean.getOrderedNestedRings(nestedRings) nestedRings = euclidean.getFlattenedNestedRings(nestedRings) portionDirections = getSpacedPortionDirections(derivation.interpolationDictionary) if len(nestedRings) < 1: return {} if len(nestedRings) == 1: geometryOutput = getGeometryOutputByNestedRing(derivation, nestedRings[0], portionDirections) return solid.getGeometryOutputByManipulation(derivation.elementNode, geometryOutput) shapes = [] for nestedRing in nestedRings: shapes.append(getGeometryOutputByNestedRing(derivation, nestedRing, portionDirections)) return solid.getGeometryOutputByManipulation(derivation.elementNode, {'union' : {'shapes' : shapes}})
def getComplexTransformedPathLists(self): "Get complex transformed path lists." complexTransformedPathLists = [] for archivableObject in self.archivableObjects: complexTransformedPathLists.append( euclidean.getComplexPaths( archivableObject.getTransformedPaths())) return complexTransformedPathLists
def getGeometryOutput(elementNode): 'Get vector3 vertexes from attribute dictionary.' derivation = VoronoiDerivation(elementNode) complexPath = euclidean.getConcatenatedList(euclidean.getComplexPaths(derivation.target)) geometryOutput = [] topRight = derivation.inradius squareLoop = euclidean.getSquareLoopWiddershins(-topRight, topRight) loopComplexes = [] for pointIndex, point in enumerate(complexPath): outsides = complexPath[: pointIndex] + complexPath[pointIndex + 1 :] loopComplex = getVoronoiLoopByPoints(point, squareLoop, outsides) loopComplex = intercircle.getLargestInsetLoopFromLoop(loopComplex, derivation.radius) loopComplexes.append(loopComplex) elementNode.attributes['closed'] = 'true' for loopComplex in loopComplexes: vector3Path = euclidean.getVector3Path(loopComplex) geometryOutput += lineation.SideLoop(vector3Path).getManipulationPluginLoops(elementNode) return geometryOutput
def getGeometryOutput(xmlElement): "Get vector3 vertexes from attribute dictionary." inradius = lineation.getComplexByPrefixes(['demisize', 'inradius'], complex(5.0, 5.0), xmlElement) inradius = lineation.getComplexByMultiplierPrefix(2.0, 'size', inradius, xmlElement) demiwidth = lineation.getFloatByPrefixBeginEnd('demiwidth', 'width', inradius.real, xmlElement) demiheight = lineation.getFloatByPrefixBeginEnd('demiheight', 'height', inradius.imag, xmlElement) radius = lineation.getComplexByPrefixBeginEnd('elementRadius', 'elementDiameter', complex(1.0, 1.0), xmlElement) radius = lineation.getComplexByPrefixBeginEnd('radius', 'diameter', radius, xmlElement) diameter = radius + radius typeString = evaluate.getEvaluatedStringDefault('rectangular', 'type', xmlElement) typeStringTwoCharacters = typeString.lower()[: 2] typeStringFirstCharacter = typeStringTwoCharacters[: 1] zigzag = evaluate.getEvaluatedBooleanDefault(True, 'zigzag', xmlElement) topRight = complex(demiwidth, demiheight) bottomLeft = -topRight loopsComplex = [euclidean.getSquareLoopWiddershins(bottomLeft, topRight)] paths = evaluate.getTransformedPathsByKey('target', xmlElement) if len(paths) > 0: loopsComplex = euclidean.getComplexPaths(paths) maximumComplex = euclidean.getMaximumByPathsComplex(loopsComplex) minimumComplex = euclidean.getMinimumByPathsComplex(loopsComplex) gridPath = None if typeStringTwoCharacters == 'he': gridPath = getHexagonalGrid(diameter, loopsComplex, maximumComplex, minimumComplex, zigzag) elif typeStringTwoCharacters == 'ra' or typeStringFirstCharacter == 'a': gridPath = getRandomGrid(diameter, loopsComplex, maximumComplex, minimumComplex, xmlElement) elif typeStringTwoCharacters == 're' or typeStringFirstCharacter == 'e': gridPath = getRectangularGrid(diameter, loopsComplex, maximumComplex, minimumComplex, zigzag) if gridPath == None: print('Warning, the step type was not one of (hexagonal, random or rectangular) in getGeometryOutput in grid for:') print(typeString) print(xmlElement) return [] loop = euclidean.getVector3Path(gridPath) xmlElement.attributeDictionary['closed'] = 'false' return lineation.getGeometryOutputByLoop(lineation.SideLoop(loop, 0.5 * math.pi), xmlElement)
def getComplexPathLists(self): "Get complex path lists." complexPathLists = [] for archivableObject in self.archivableObjects: complexPathLists.append(euclidean.getComplexPaths(archivableObject.getPaths())) return complexPathLists
def getComplexTransformedPathLists(self): 'Get complex transformed path lists.' complexTransformedPathLists = [] for archivableObject in self.archivableObjects: complexTransformedPathLists.append(euclidean.getComplexPaths(archivableObject.getTransformedPaths())) return complexTransformedPathLists