Esempio n. 1
0
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
Esempio n. 2
0
 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)