- nsegs=static_cast<unsigned>(part.length*(1<<quality))+1;
- Point center(x-sin(dir)*radius, y+cos(dir)*radius, 0);
- float r=fabs(radius);
- float start=((radius<0)?M_PI:0)+dir;
- float angle=(radius<0)?-length:length;
- int inv=(radius<0)?-1:1;
- for(unsigned i=0; i<=nsegs; ++i)
- {
- float a=start+i*angle/nsegs;
- float c=cos(a);
- float s=sin(a);
-
- for(unsigned j=0; j<profile.size(); ++j)
- {
- unsigned k=j&~1;
- float dy=profile[k+1].y-profile[k].y;
- float dz=profile[k+1].z-profile[k].z;
- float d=sqrt(dy*dy+dz*dz);
- va_builder.normal(s*dz/d, -c*dz/d, dy/d);
-
- Point p(center.x+s*(r-profile[j].y*inv), center.y-c*(r-profile[j].y*inv), profile[j].z+i*track.get_slope()/nsegs);
- va_builder.vertex(p.x, p.y, p.z);
- if(profile[j].z==0)
- border.push_back(p);
- }
- }
- }
- else
- {
- nsegs=1;
- float c=cos(dir);
- float s=sin(dir);
- for(unsigned i=0; i<2; ++i)
+ float a = part.dir+(part.radius ? i*plen/nsegs/part.radius : 0);
+ float c = cos(a);
+ float s = sin(a);
+ Point p = part.get_point(i*plen/nsegs);
+
+ for(unsigned j=0; j<psize; ++j)