MrDraw/SkeinPyPy_NewUI/fabmetheus_utilities/geometry/statements/for.py
Daid a414a80837 Adding SkeinPyPy_NewUI as development for a brand new user interface.
Experimental, doesn't slice yet, loads of work ahead.
2012-02-20 00:30:49 +01:00

72 lines
2.6 KiB
Python

"""
Polygon path.
"""
from __future__ import absolute_import
#Init has to be imported first because it has code to workaround the python bug where relative imports don't work if the module is imported as a main module.
import __init__
from fabmetheus_utilities.geometry.geometry_utilities import evaluate
__author__ = 'Enrique Perez (perez_enrique@yahoo.com)'
__credits__ = 'Art of Illusion <http://www.artofillusion.org/>'
__date__ = '$Date: 2008/02/05 $'
__license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html'
def processChildNodesByIndexValue( elementNode, function, index, indexValue, value ):
"Process childNodes by index value."
if indexValue.indexName != '':
function.localDictionary[ indexValue.indexName ] = index
if indexValue.valueName != '':
function.localDictionary[ indexValue.valueName ] = value
function.processChildNodes(elementNode)
def processElementNode(elementNode):
"Process the xml element."
if elementNode.xmlObject == None:
elementNode.xmlObject = IndexValue(elementNode)
if elementNode.xmlObject.inSplitWords == None:
return
xmlProcessor = elementNode.getXMLProcessor()
if len( xmlProcessor.functions ) < 1:
print('Warning, "for" element is not in a function in processElementNode in for.py for:')
print(elementNode)
return
function = xmlProcessor.functions[-1]
inValue = evaluate.getEvaluatedExpressionValueBySplitLine(elementNode, elementNode.xmlObject.inSplitWords)
if inValue.__class__ == list or inValue.__class__ == str:
for index, value in enumerate( inValue ):
processChildNodesByIndexValue( elementNode, function, index, elementNode.xmlObject, value )
return
if inValue.__class__ == dict:
inKeys = inValue.keys()
inKeys.sort()
for inKey in inKeys:
processChildNodesByIndexValue( elementNode, function, inKey, elementNode.xmlObject, inValue[ inKey ] )
class IndexValue:
"Class to get the in attribute, the index name and the value name."
def __init__(self, elementNode):
"Initialize."
self.inSplitWords = None
self.indexName = ''
if 'index' in elementNode.attributes:
self.indexName = elementNode.attributes['index']
self.valueName = ''
if 'value' in elementNode.attributes:
self.valueName = elementNode.attributes['value']
if 'in' in elementNode.attributes:
self.inSplitWords = evaluate.getEvaluatorSplitWords( elementNode.attributes['in'] )
else:
print('Warning, could not find the "in" attribute in IndexValue in for.py for:')
print(elementNode)
return
if len( self.inSplitWords ) < 1:
self.inSplitWords = None
print('Warning, could not get split words for the "in" attribute in IndexValue in for.py for:')
print(elementNode)