def _parseSegmentNode(name, node, xmlStateGroups): """ parses a segment node and creates a segment instance. """ segmentParams = {} for child in list(node): # parse vertices if child.tag == "vertices": _parseSegmentVertices(child, segmentParams) # parse faces elif child.tag == "faces": _parseSegmentFaces(child, segmentParams, xmlStateGroups) # parse evaluators elif child.tag == "evaluators": _parseSegmentEvaluators(child, segmentParams, xmlStateGroups) # parse nurbs elif child.tag == "nurbs": _parseSegmentNurbs(child, segmentParams, xmlStateGroups) elif child.tag == "state": xmlParseStateParam( child, segmentParams ) elif child.tag == "stateGroup": xmlParseStateGroupParam(child, segmentParams, xmlStateGroups) elif child.tag == "vertexParam": xmlParseVertexParam( child, segmentParams , xmlStateGroups) else: print "WARNING: XML: unknown tag '%s'" % child.tag try: segmentCls = segmentParams['cls'] except: print "WARNING: no segment class sepecified!" return None return (name, segmentParams, segmentCls)
from utils.util import unique from xml_parser.xml_state import xmlParseStateParam, xmlParseVertexParam def _parseModelSegmentNode(xmlMaterials, lights, (segmentName, segmentParams, segmentCls), node): """ parse segment configuration specified by model. """ baseImage = None for child in list(node): if child.tag == "state": xmlParseStateParam( child, segmentParams ) elif child.tag == "vertexParam": xmlParseVertexParam( child, segmentParams ) elif child.tag == "image": baseImage = str(child.get('val')) elif child.tag == "material": material = loadXMLMaterial(xmlMaterials, str(child.get('name'))) else: print "WARNING: unknown model segment tag '%s'" % child.tag if material == None: # segment needs material material = GLMaterial() segmentParams['material'] = material segment = segmentCls(name=segmentName, params=segmentParams) if baseImage!=None:
def _parseSegmentNurbs(node, segmentParams, xmlStateGroups): evaluators = [] vertexEvaluator = None normalEvaluator = None needsNormals = False segmentParams['cls'] = EvaluatorSegment for child in list(node): if child.tag != "nurb": continue target = child.get('target', 'vertex') uKnot = [0.0]*4 + [1.0]*4 vKnot = [0.0]*4 + [1.0]*4 params = {} for n in list(child): if n.tag == "u": uKnot = xmlFloatListC(n.get('knot'), uKnot) elif n.tag == "v": vKnot = xmlFloatListC(n.get('knot'), vKnot) elif n.tag == "ctrls": params['ctrls'] = _parseEvaluatorCtrls(n) elif n.tag == "state": xmlParseStateParam(n, params) elif child.tag == "stateGroup": xmlParseStateGroupParam(n, params, xmlStateGroups) elif n.tag == "vertexParam": xmlParseVertexParam( n, params , xmlStateGroups) try: params['ctrls'][0][0][0] isCurve = False except: isCurve = True params['tolerance'] = xmlFloat(child.get('tolerance'), 25.0) if isCurve: params['target'] = _curveTargets()[target] params['knots'] = [uKnot] nurbCls = NURBCurveEvaluator else: params['target'] = _patchTargets()[target] params['knots'] = [uKnot, vKnot] nurbCls = NURBPatchEvaluator evaluator = nurbCls(params) if target=="vertex" or target=="vertex4": vertexEvaluator = evaluator # curves dont need normals needsNormals = not isCurve if target=="normal": normalEvaluator = evaluator evaluators.append(evaluator) if needsNormals and normalEvaluator==None and vertexEvaluator!=None: vertexEvaluator.generateNormals = True segmentParams['evaluators'] = evaluators
def _parseSegmentEvaluators(node, segmentParams, xmlStateGroups): evaluators = [] def _readParam(n, name, param): param.min = xmlFloat(n.get('min'), 0.0) param.max = xmlFloat(n.get('max'), 1.0) param.steps = xmlInt(n.get('steps'), 20) vertexEvaluator = None normalEvaluator = None needsNormals = False for child in list(node): if child.tag != "evaluator": continue segmentParams['cls'] = EvaluatorSegment evalParams = {} target = child.get('target', 'vertex') u = EvalParam("u") v = EvalParam("v") for n in list(child): if n.tag == "u": _readParam(n, n.tag, u) elif n.tag == "v": _readParam(n, n.tag, v) elif n.tag == "ctrls": evalParams['ctrls'] = _parseEvaluatorCtrls(n) elif n.tag == "state": xmlParseStateParam(n, evalParams) elif child.tag == "stateGroup": xmlParseStateGroupParam(n, evalParams, xmlStateGroups) elif n.tag == "vertexParam": xmlParseVertexParam( n, evalParams , xmlStateGroups) try: evalParams['ctrls'][0][0][0] isCurve = False except: isCurve = True if isCurve: evalParams['target'] = _curveTargets()[target] evalParams['params'] = [u] evaluatorCls = CurveEvaluator else: evalParams['target'] = _patchTargets()[target] evalParams['params'] = [u, v] evaluatorCls = PatchEvaluator evaluator = evaluatorCls(evalParams) if target=="vertex" or target=="vertex4": vertexEvaluator = evaluator # curves dont need normals needsNormals = not isCurve if target=="normal": normalEvaluator = evaluator evaluators.append(evaluator) if needsNormals and normalEvaluator==None and vertexEvaluator!=None: vertexEvaluator.generateNormals = True segmentParams['evaluators'] = evaluators