def __init__(self, fname, Isect=7): self.Isect = Isect # Fix the section all rectangle unwrapping is relative to self.sections, self.zvals = loadwinggeometry(fname, 0.001) self.nsections = len(self.zvals) assert self.nsections == len(self.sections) self.nchorddivs = len(self.sections[0]) assert self.nchorddivs == len(self.sections[-1]) self.sectionchordlengths = [ ] self.sectionchordranges = [ ] for section in self.sections: chordlengths = [ 0 ] for p0, p1 in zip(section, section[1:]): chordlengths.append(chordlengths[-1] + (p0-p1).Len()) self.sectionchordlengths.append(chordlengths) self.sectionchordranges.append((-chordlengths[-1]*0.5, chordlengths[-1]*0.5)) self.leadingedgelengths = [ 0 ] for i in range(1, self.nsections): p0 = P3.ConvertGZ(self.sectionchordeval(i-1, 0), self.zvals[i-1]) p1 = P3.ConvertGZ(self.sectionchordeval(i, 0), self.zvals[i]) self.leadingedgelengths.append(self.leadingedgelengths[-1] + (p0-p1).Len()) self.urange = (self.leadingedgelengths[0], self.leadingedgelengths[-1]) self.vrange = self.sectionchordranges[self.Isect]
def sevalI(self, p): i = max(0, min(self.nsections-2, int(p[0]))) m = p[0] - i p0 = P3.ConvertGZ(self.sectionchordevalI(i, p[1]), self.zvals[i]) p1 = P3.ConvertGZ(self.sectionchordevalI(i+1, p[1]), self.zvals[i+1]) return p0*(1-m) + p1*m