def __init__(self, elementNode): 'Set defaults.' self.elementNode = elementNode self.importRadius = setting.getImportRadius(elementNode) self.layerThickness = setting.getLayerThickness(elementNode) self.sheetThickness = setting.getSheetThickness(elementNode) self.targetElementNode = evaluate.getElementNodeByKey(elementNode, 'target')
def __init__(self, elementNode): 'Set defaults.' self.elementNode = elementNode self.importRadius = setting.getImportRadius(elementNode) self.layerHeight = setting.getLayerHeight(elementNode) self.targetElementNode = evaluate.getElementNodeByKey( elementNode, 'target')
def getManipulatedGeometryOutput(elementNode, geometryOutput, prefix): 'Get inset geometryOutput.' derivation = InsetDerivation(elementNode, prefix) if derivation.radius == 0.0: return geometryOutput copyShallow = elementNode.getCopyShallow() solid.processElementNodeByGeometry(copyShallow, geometryOutput) targetMatrix = matrix.getBranchMatrixSetElementNode(elementNode) matrix.setElementNodeDictionaryMatrix(copyShallow, targetMatrix) transformedVertexes = copyShallow.xmlObject.getTransformedVertexes() minimumZ = boolean_geometry.getMinimumZ(copyShallow.xmlObject) maximumZ = euclidean.getTopPath(transformedVertexes) layerThickness = setting.getLayerThickness(elementNode) importRadius = setting.getImportRadius(elementNode) zoneArrangement = triangle_mesh.ZoneArrangement(layerThickness, transformedVertexes) copyShallow.attributes['visible'] = True copyShallowObjects = [copyShallow.xmlObject] bottomLoopLayer = euclidean.LoopLayer(minimumZ) z = minimumZ + 0.1 * layerThickness bottomLoopLayer.loops = boolean_geometry.getEmptyZLoops(copyShallowObjects, importRadius, False, z, zoneArrangement) loopLayers = [bottomLoopLayer] z = minimumZ + layerThickness loopLayers += boolean_geometry.getLoopLayers(copyShallowObjects, importRadius, layerThickness, maximumZ, False, z, zoneArrangement) copyShallow.parentNode.xmlObject.archivableObjects.remove(copyShallow.xmlObject) belowLoop = [] diagonalRadius = math.sqrt(0.5) * derivation.radius insetDiagonalLoops = [] loops = [] vertexes = [] for loopLayer in loopLayers: insetDiagonalLoops.append(intercircle.getLargestInsetLoopFromLoop(loopLayer.loops[0], diagonalRadius)) for loopLayerIndex, loopLayer in enumerate(loopLayers): vector3Loop = [] insetLoop = intercircle.getLargestInsetLoopFromLoop(loopLayer.loops[0], derivation.radius) loopLists = [[getLoopOrEmpty(loopLayerIndex - 1, insetDiagonalLoops)], [insetLoop]] largestLoop = euclidean.getLargestLoop(boolean_solid.getLoopsIntersection(importRadius, loopLists)) if evaluate.getEvaluatedBoolean(True, elementNode, prefix + 'insetTop'): loopLists = [[getLoopOrEmpty(loopLayerIndex + 1, insetDiagonalLoops)], [largestLoop]] largestLoop = euclidean.getLargestLoop(boolean_solid.getLoopsIntersection(importRadius, loopLists)) for point in largestLoop: vector3Index = Vector3Index(len(vertexes), point.real, point.imag, loopLayer.z) vector3Loop.append(vector3Index) vertexes.append(vector3Index) if len(vector3Loop) > 0: loops.append(vector3Loop) if evaluate.getEvaluatedBoolean(False, elementNode, prefix + 'addExtraTopLayer') and len(loops) > 0: topLoop = loops[-1] vector3Loop = [] loops.append(vector3Loop) z = topLoop[0].z + layerThickness for point in topLoop: vector3Index = Vector3Index(len(vertexes), point.x, point.y, z) vector3Loop.append(vector3Index) vertexes.append(vector3Index) geometryOutput = triangle_mesh.getMeldedPillarOutput(loops) return geometryOutput
def getMinimumZ(geometryObject): 'Get the minimum of the minimum z of the archivableObjects and the object.' booleanGeometry = BooleanGeometry() booleanGeometry.archivableObjects = geometryObject.archivableObjects booleanGeometry.importRadius = setting.getImportRadius(geometryObject.elementNode) booleanGeometry.layerHeight = setting.getLayerHeight(geometryObject.elementNode) archivableMinimumZ = booleanGeometry.getMinimumZ() geometryMinimumZ = geometryObject.getMinimumZ() if archivableMinimumZ == None: return geometryMinimumZ if geometryMinimumZ == None: return archivableMinimumZ return min(archivableMinimumZ, geometryMinimumZ)
def getMinimumZ(geometryObject): 'Get the minimum of the minimum z of the archivableObjects and the object.' booleanGeometry = BooleanGeometry() booleanGeometry.archivableObjects = geometryObject.archivableObjects booleanGeometry.importRadius = setting.getImportRadius(geometryObject.elementNode) booleanGeometry.layerThickness = setting.getLayerThickness(geometryObject.elementNode) archivableMinimumZ = booleanGeometry.getMinimumZ() geometryMinimumZ = geometryObject.getMinimumZ() if archivableMinimumZ == None: return geometryMinimumZ if geometryMinimumZ == None: return archivableMinimumZ return min(archivableMinimumZ, geometryMinimumZ)
def getMinimumZ(geometryObject): """Get the minimum of the minimum z of the archivableObjects and the object.""" booleanGeometry = BooleanGeometry() booleanGeometry.archivableObjects = geometryObject.archivableObjects booleanGeometry.importRadius = setting.getImportRadius(geometryObject.xmlElement) booleanGeometry.extrusionHeight = setting.getLayerThickness(geometryObject.xmlElement) archivableMinimumZ = booleanGeometry.getMinimumZ() geometryMinimumZ = geometryObject.getMinimumZ() if archivableMinimumZ is None and geometryMinimumZ is None: return None if archivableMinimumZ is None: return geometryMinimumZ if geometryMinimumZ is None: return archivableMinimumZ return min(archivableMinimumZ, geometryMinimumZ)
def getTransformedPaths(self): 'Get all transformed paths.' importRadius = setting.getImportRadius(self.elementNode) loopsFromObjectLoopsList = self.getLoopsFromObjectLoopsList( importRadius, self.getComplexTransformedPathLists()) return euclidean.getVector3Paths(loopsFromObjectLoopsList)
def __init__(self, elementNode): 'Set defaults.' self.elementNode = elementNode self.importRadius = setting.getImportRadius(elementNode) self.layerHeight = setting.getLayerHeight(elementNode) self.targetElementNode = evaluate.getElementNodeByKey(elementNode, 'target')
def getTransformedPaths(self): 'Get all transformed paths.' importRadius = setting.getImportRadius(self.xmlElement) loopsFromObjectLoopsList = self.getLoopsFromObjectLoopsList(importRadius, self.getComplexTransformedPathLists()) return euclidean.getVector3Paths(loopsFromObjectLoopsList)
def __init__(self, xmlElement): 'Set defaults.' self.importRadius = setting.getImportRadius(xmlElement) self.layerThickness = setting.getLayerThickness(xmlElement) self.sheetThickness = setting.getSheetThickness(xmlElement) self.targetXMLElement = evaluate.getXMLElementByKey('target', xmlElement)
def getManipulatedGeometryOutput(elementNode, geometryOutput, prefix): 'Get inset geometryOutput.' derivation = InsetDerivation(elementNode, prefix) if derivation.radius == 0.0: return geometryOutput copyShallow = elementNode.getCopyShallow() solid.processElementNodeByGeometry(copyShallow, geometryOutput) targetMatrix = matrix.getBranchMatrixSetElementNode(elementNode) matrix.setElementNodeDictionaryMatrix(copyShallow, targetMatrix) transformedVertexes = copyShallow.xmlObject.getTransformedVertexes() minimumZ = boolean_geometry.getMinimumZ(copyShallow.xmlObject) maximumZ = euclidean.getTopPath(transformedVertexes) layerThickness = setting.getLayerThickness(elementNode) importRadius = setting.getImportRadius(elementNode) zoneArrangement = triangle_mesh.ZoneArrangement(layerThickness, transformedVertexes) copyShallow.attributes['visible'] = True copyShallowObjects = [copyShallow.xmlObject] bottomLoopLayer = euclidean.LoopLayer(minimumZ) z = minimumZ + 0.1 * layerThickness bottomLoopLayer.loops = boolean_geometry.getEmptyZLoops( copyShallowObjects, importRadius, False, z, zoneArrangement) loopLayers = [bottomLoopLayer] z = minimumZ + layerThickness loopLayers += boolean_geometry.getLoopLayers(copyShallowObjects, importRadius, layerThickness, maximumZ, False, z, zoneArrangement) copyShallow.parentNode.xmlObject.archivableObjects.remove( copyShallow.xmlObject) belowLoop = [] diagonalRadius = math.sqrt(0.5) * derivation.radius insetDiagonalLoops = [] loops = [] vertexes = [] for loopLayer in loopLayers: insetDiagonalLoops.append( intercircle.getLargestInsetLoopFromLoop(loopLayer.loops[0], diagonalRadius)) for loopLayerIndex, loopLayer in enumerate(loopLayers): vector3Loop = [] insetLoop = intercircle.getLargestInsetLoopFromLoop( loopLayer.loops[0], derivation.radius) loopLists = [[getLoopOrEmpty(loopLayerIndex - 1, insetDiagonalLoops)], [insetLoop]] largestLoop = euclidean.getLargestLoop( boolean_solid.getLoopsIntersection(importRadius, loopLists)) if evaluate.getEvaluatedBoolean(True, elementNode, prefix + 'insetTop'): loopLists = [[ getLoopOrEmpty(loopLayerIndex + 1, insetDiagonalLoops) ], [largestLoop]] largestLoop = euclidean.getLargestLoop( boolean_solid.getLoopsIntersection(importRadius, loopLists)) for point in largestLoop: vector3Index = Vector3Index(len(vertexes), point.real, point.imag, loopLayer.z) vector3Loop.append(vector3Index) vertexes.append(vector3Index) if len(vector3Loop) > 0: loops.append(vector3Loop) if evaluate.getEvaluatedBoolean(False, elementNode, prefix + 'addExtraTopLayer') and len(loops) > 0: topLoop = loops[-1] vector3Loop = [] loops.append(vector3Loop) z = topLoop[0].z + layerThickness for point in topLoop: vector3Index = Vector3Index(len(vertexes), point.x, point.y, z) vector3Loop.append(vector3Index) vertexes.append(vector3Index) geometryOutput = triangle_mesh.getMeldedPillarOutput(loops) return geometryOutput
def __init__(self, xmlElement): """Set defaults.""" self.importRadius = setting.getImportRadius(xmlElement) self.extrusionHeight = setting.getLayerThickness(xmlElement) self.sheetThickness = setting.getSheetThickness(xmlElement) self.targetXMLElement = evaluate.getXMLElementByKey("target", xmlElement)