Example #1
0
def getLoopLayersSetCopy(elementNode, geometryOutput, importRadius, radius):
    'Get the loop layers and set the copyShallow.'
    halfLayerHeight = 0.5 * radius
    copyShallow = elementNode.getCopyShallow()
    processElementNodeByGeometry(copyShallow, geometryOutput)
    targetMatrix = matrix.getBranchMatrixSetElementNode(elementNode)
    matrix.setElementNodeDictionaryMatrix(copyShallow, targetMatrix)
    transformedVertexes = copyShallow.xmlObject.getTransformedVertexes()
    minimumZ = boolean_geometry.getMinimumZ(copyShallow.xmlObject)
    if minimumZ == None:
        copyShallow.parentNode.xmlObject.archivableObjects.remove(
            copyShallow.xmlObject)
        return []
    maximumZ = euclidean.getTopPath(transformedVertexes)
    copyShallow.attributes['visible'] = True
    copyShallowObjects = [copyShallow.xmlObject]
    bottomLoopLayer = euclidean.LoopLayer(minimumZ)
    z = minimumZ + 0.1 * radius
    zoneArrangement = triangle_mesh.ZoneArrangement(radius,
                                                    transformedVertexes)
    bottomLoopLayer.loops = boolean_geometry.getEmptyZLoops(
        copyShallowObjects, importRadius, False, z, zoneArrangement)
    loopLayers = [bottomLoopLayer]
    z = minimumZ + halfLayerHeight
    loopLayers += boolean_geometry.getLoopLayers(copyShallowObjects,
                                                 importRadius, halfLayerHeight,
                                                 maximumZ, False, z,
                                                 zoneArrangement)
    copyShallow.parentNode.xmlObject.archivableObjects.remove(
        copyShallow.xmlObject)
    return loopLayers
Example #2
0
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
Example #3
0
def processXMLElementByDerivation(derivation, xmlElement):
	'Process the xml element by derivation.'
	if derivation == None:
		derivation = DisjoinDerivation(xmlElement)
	targetXMLElement = derivation.targetXMLElement
	if targetXMLElement == None:
		print('Warning, disjoin could not get target for:')
		print(xmlElement)
		return
	xmlObject = targetXMLElement.xmlObject
	if xmlObject == None:
		print('Warning, processXMLElementByDerivation in disjoin could not get xmlObject for:')
		print(targetXMLElement)
		print(derivation.xmlElement)
		return
	transformedVertexes = xmlObject.getTransformedVertexes()
	if len(transformedVertexes) < 1:
		print('Warning, transformedVertexes is zero in processXMLElementByDerivation in disjoin for:')
		print(xmlObject)
		print(targetXMLElement)
		print(derivation.xmlElement)
		return
	xmlElement.localName = 'group'
	xmlElement.getXMLProcessor().processXMLElement(xmlElement)
	matrix.getBranchMatrixSetXMLElement(targetXMLElement)
	targetChainMatrix = matrix.Matrix(xmlObject.getMatrixChainTetragrid())
	minimumZ = boolean_geometry.getMinimumZ(xmlObject)
	z = minimumZ + 0.5 * derivation.sheetThickness
	zoneArrangement = triangle_mesh.ZoneArrangement(derivation.layerThickness, transformedVertexes)
	oldVisibleString = targetXMLElement.attributeDictionary['visible']
	targetXMLElement.attributeDictionary['visible'] = True
	loops = boolean_geometry.getEmptyZLoops([xmlObject], derivation.importRadius, False, z, zoneArrangement)
	targetXMLElement.attributeDictionary['visible'] = oldVisibleString
	vector3Loops = euclidean.getVector3Paths(loops, z)
	pathElement = getLinkedXMLElement('_sheet', xmlElement, targetXMLElement)
	path.convertXMLElement(vector3Loops, pathElement)
	targetOutput = xmlObject.getGeometryOutput()
	differenceElement = getLinkedXMLElement('_solid', xmlElement, targetXMLElement)
	targetElementCopy = targetXMLElement.getCopy('_positive', differenceElement)
	targetElementCopy.attributeDictionary['visible'] = True
	targetElementCopy.attributeDictionary.update(targetChainMatrix.getAttributeDictionary('matrix.'))
	complexMaximum = euclidean.getMaximumByVector3Path(transformedVertexes).dropAxis()
	complexMinimum = euclidean.getMinimumByVector3Path(transformedVertexes).dropAxis()
	centerComplex = 0.5 * (complexMaximum + complexMinimum)
	centerVector3 = Vector3(centerComplex.real, centerComplex.imag, minimumZ)
	slightlyMoreThanHalfExtent = 0.501 * (complexMaximum - complexMinimum)
	inradius = Vector3(slightlyMoreThanHalfExtent.real, slightlyMoreThanHalfExtent.imag, derivation.sheetThickness)
	cubeElement = xml_simple_reader.XMLElement()
	cubeElement.attributeDictionary['inradius'] = str(inradius)
	if not centerVector3.getIsDefault():
		cubeElement.attributeDictionary['translate.'] = str(centerVector3)
	cubeElement.localName = 'cube'
	cubeElement.importName = differenceElement.importName
	cubeElement.setParentAddToChildNodes(differenceElement)
	difference.processXMLElement(differenceElement)
Example #4
0
def getManipulatedGeometryOutput(elementNode, geometryOutput, prefix):
    "Get bottomed geometryOutput."
    derivation = BottomDerivation(elementNode, prefix)
    copyShallow = elementNode.getCopyShallow()
    solid.processElementNodeByGeometry(copyShallow, geometryOutput)
    targetMatrix = matrix.getBranchMatrixSetElementNode(elementNode)
    matrix.setElementNodeDictionaryMatrix(copyShallow, targetMatrix)
    minimumZ = boolean_geometry.getMinimumZ(copyShallow.xmlObject)
    copyShallow.parentNode.xmlObject.archivableObjects.remove(copyShallow.xmlObject)
    lift = derivation.altitude - minimumZ
    vertexes = matrix.getVertexes(geometryOutput)
    for vertex in vertexes:
        vertex.z += lift
    return geometryOutput
Example #5
0
def getManipulatedGeometryOutput(elementNode, geometryOutput, prefix):
	'Get bottomed geometryOutput.'
	derivation = BottomDerivation(elementNode, prefix)
	copyShallow = elementNode.getCopyShallow()
	solid.processElementNodeByGeometry(copyShallow, geometryOutput)
	targetMatrix = matrix.getBranchMatrixSetElementNode(elementNode)
	matrix.setElementNodeDictionaryMatrix(copyShallow, targetMatrix)
	minimumZ = boolean_geometry.getMinimumZ(copyShallow.xmlObject)
	copyShallow.parentNode.xmlObject.archivableObjects.remove(copyShallow.xmlObject)
	lift = derivation.altitude - minimumZ
	vertexes = matrix.getVertexes(geometryOutput)
	for vertex in vertexes:
		vertex.z += lift
	return geometryOutput
Example #6
0
def getManipulatedGeometryOutput(geometryOutput, prefix, xmlElement):
	"""Get bottomed geometryOutput."""
	derivation = BottomDerivation(prefix, xmlElement)
	copyShallow = xmlElement.getCopyShallow()
	solid.processXMLElementByGeometry(geometryOutput, copyShallow)
	targetMatrix = matrix.getBranchMatrixSetXMLElement(xmlElement)
	matrix.setXMLElementDictionaryMatrix(targetMatrix, copyShallow)
	minimumZ = boolean_geometry.getMinimumZ(copyShallow.xmlObject)
	copyShallow.parent.xmlObject.archivableObjects.remove(copyShallow.xmlObject)
	lift = derivation.altitude - minimumZ
	vertexes = matrix.getVertexes(geometryOutput)
	for vertex in vertexes:
		vertex.z += lift
	return geometryOutput
Example #7
0
def processElementNodeByDerivation(derivation, elementNode):
    'Process the xml element by derivation.'
    if derivation == None:
        derivation = CarveDerivation(elementNode)
    targetElementNode = derivation.targetElementNode
    if targetElementNode == None:
        print('Warning, carve could not get target for:')
        print(elementNode)
        return
    xmlObject = targetElementNode.xmlObject
    if xmlObject == None:
        print(
            'Warning, processElementNodeByDerivation in carve could not get xmlObject for:'
        )
        print(targetElementNode)
        print(derivation.elementNode)
        return
    matrix.getBranchMatrixSetElementNode(targetElementNode)
    transformedVertexes = xmlObject.getTransformedVertexes()
    if len(transformedVertexes) < 1:
        print(
            'Warning, transformedVertexes is zero in processElementNodeByDerivation in carve for:'
        )
        print(xmlObject)
        print(targetElementNode)
        print(derivation.elementNode)
        return
    elementNode.localName = 'group'
    elementNode.getXMLProcessor().processElementNode(elementNode)
    minimumZ = boolean_geometry.getMinimumZ(xmlObject)
    maximumZ = euclidean.getTopPath(transformedVertexes)
    zoneArrangement = triangle_mesh.ZoneArrangement(derivation.layerThickness,
                                                    transformedVertexes)
    oldVisibleString = targetElementNode.attributes['visible']
    targetElementNode.attributes['visible'] = True
    z = minimumZ + 0.5 * derivation.layerThickness
    loopLayers = boolean_geometry.getLoopLayers([xmlObject],
                                                derivation.importRadius,
                                                derivation.layerThickness,
                                                maximumZ, False, z,
                                                zoneArrangement)
    targetElementNode.attributes['visible'] = oldVisibleString
    for loopLayerIndex, loopLayer in enumerate(loopLayers):
        if len(loopLayer.loops) > 0:
            pathElement = getLinkedElementNode('_carve_%s' % loopLayerIndex,
                                               elementNode, targetElementNode)
            vector3Loops = euclidean.getVector3Paths(loopLayer.loops,
                                                     loopLayer.z)
            path.convertElementNode(pathElement, vector3Loops)
Example #8
0
def getManipulatedGeometryOutput(geometryOutput, prefix, xmlElement):
    'Get bottomed geometryOutput.'
    derivation = BottomDerivation(prefix, xmlElement)
    copyShallow = xmlElement.getCopyShallow()
    solid.processXMLElementByGeometry(geometryOutput, copyShallow)
    targetMatrix = matrix.getBranchMatrixSetXMLElement(xmlElement)
    matrix.setXMLElementDictionaryMatrix(targetMatrix, copyShallow)
    minimumZ = boolean_geometry.getMinimumZ(copyShallow.xmlObject)
    copyShallow.parent.xmlObject.archivableObjects.remove(
        copyShallow.xmlObject)
    lift = derivation.altitude - minimumZ
    vertexes = matrix.getVertexes(geometryOutput)
    for vertex in vertexes:
        vertex.z += lift
    return geometryOutput
Example #9
0
def processElementNodeByDerivation(derivation, elementNode):
    'Process the xml element by derivation.'
    if derivation == None:
        derivation = CarveDerivation(elementNode)
    targetElementNode = derivation.targetElementNode
    if targetElementNode == None:
        print('Warning, carve could not get target for:')
        print(elementNode)
        return
    xmlObject = targetElementNode.xmlObject
    if xmlObject == None:
        print(
            'Warning, processElementNodeByDerivation in carve could not get xmlObject for:'
        )
        print(targetElementNode)
        print(derivation.elementNode)
        return
    matrix.getBranchMatrixSetElementNode(targetElementNode)
    transformedVertexes = xmlObject.getTransformedVertexes()
    if len(transformedVertexes) < 1:
        print(
            'Warning, transformedVertexes is zero in processElementNodeByDerivation in carve for:'
        )
        print(xmlObject)
        print(targetElementNode)
        print(derivation.elementNode)
        return
    elementNode.localName = 'group'
    elementNode.getXMLProcessor().processElementNode(elementNode)
    minimumZ = boolean_geometry.getMinimumZ(xmlObject)
    maximumZ = euclidean.getTopPath(transformedVertexes)
    zoneArrangement = triangle_mesh.ZoneArrangement(derivation.layerHeight,
                                                    transformedVertexes)
    oldVisibleString = targetElementNode.attributes['visible']
    targetElementNode.attributes['visible'] = True
    z = minimumZ + 0.5 * derivation.layerHeight
    loopLayers = boolean_geometry.getLoopLayers(
        [xmlObject], derivation.importRadius, derivation.layerHeight, maximumZ,
        False, z, zoneArrangement)
    targetElementNode.attributes['visible'] = oldVisibleString
    for loopLayerIndex, loopLayer in enumerate(loopLayers):
        if len(loopLayer.loops) > 0:
            pathElement = getLinkedElementNode('_carve_%s' % loopLayerIndex,
                                               elementNode, targetElementNode)
            vector3Loops = euclidean.getVector3Paths(loopLayer.loops,
                                                     loopLayer.z)
            path.convertElementNode(pathElement, vector3Loops)
Example #10
0
def bottomElementNode(derivation, target):
    "Bottom target."
    xmlObject = target.xmlObject
    if xmlObject == None:
        print("Warning, bottomTarget in bottom could not get xmlObject for:")
        print(target)
        print(derivation.elementNode)
        return
    targetMatrix = matrix.getBranchMatrixSetElementNode(target)
    lift = derivation.altitude
    transformedPaths = xmlObject.getTransformedPaths()
    if len(transformedPaths) > 0:
        lift += derivation.getAdditionalPathLift() - euclidean.getBottomByPaths(transformedPaths)
    else:
        lift -= boolean_geometry.getMinimumZ(xmlObject)
    targetMatrix.tetragrid = matrix.getIdentityTetragrid(targetMatrix.tetragrid)
    targetMatrix.tetragrid[2][3] += lift
    matrix.setElementNodeDictionaryMatrix(target, targetMatrix)
Example #11
0
def bottomElementNode(derivation, target):
	"Bottom target."
	xmlObject = target.xmlObject
	if xmlObject == None:
		print('Warning, bottomTarget in bottom could not get xmlObject for:')
		print(target)
		print(derivation.elementNode)
		return
	targetMatrix = matrix.getBranchMatrixSetElementNode(target)
	lift = derivation.altitude
	transformedPaths = xmlObject.getTransformedPaths()
	if len(transformedPaths) > 0:
		lift += derivation.getAdditionalPathLift() - euclidean.getBottomByPaths(transformedPaths)
	else:
		lift -= boolean_geometry.getMinimumZ(xmlObject)
	targetMatrix.tetragrid = matrix.getIdentityTetragrid(targetMatrix.tetragrid)
	targetMatrix.tetragrid[2][3] += lift
	matrix.setElementNodeDictionaryMatrix(target, targetMatrix)
Example #12
0
def getLoopLayersSetCopy(elementNode, geometryOutput, importRadius, radius):
	'Get the loop layers and set the copyShallow.'
	halfLayerHeight = 0.5 * radius
	copyShallow = elementNode.getCopyShallow()
	processElementNodeByGeometry(copyShallow, geometryOutput)
	targetMatrix = matrix.getBranchMatrixSetElementNode(elementNode)
	matrix.setElementNodeDictionaryMatrix(copyShallow, targetMatrix)
	transformedVertexes = copyShallow.xmlObject.getTransformedVertexes()
	minimumZ = boolean_geometry.getMinimumZ(copyShallow.xmlObject)
	if minimumZ == None:
		copyShallow.parentNode.xmlObject.archivableObjects.remove(copyShallow.xmlObject)
		return []
	maximumZ = euclidean.getTopPath(transformedVertexes)
	copyShallow.attributes['visible'] = True
	copyShallowObjects = [copyShallow.xmlObject]
	bottomLoopLayer = euclidean.LoopLayer(minimumZ)
	z = minimumZ + 0.1 * radius
	zoneArrangement = triangle_mesh.ZoneArrangement(radius, transformedVertexes)
	bottomLoopLayer.loops = boolean_geometry.getEmptyZLoops(copyShallowObjects, importRadius, False, z, zoneArrangement)
	loopLayers = [bottomLoopLayer]
	z = minimumZ + halfLayerHeight
	loopLayers += boolean_geometry.getLoopLayers(copyShallowObjects, importRadius, halfLayerHeight, maximumZ, False, z, zoneArrangement)
	copyShallow.parentNode.xmlObject.archivableObjects.remove(copyShallow.xmlObject)
	return loopLayers
Example #13
0
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