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 _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)