Vector2Array Curve2D::get_points_pos() const { Vector2Array ret; ret.resize(points.size()); for (int i=0; i<points.size(); i++) { ret.set(i, points[i].pos); }; return ret; };
Vector2Array Curve2D::tesselate(int p_max_stages,float p_tolerance) const { Vector2Array tess; if (points.size()==0) { return tess; } Vector< Map<float,Vector2> > midpoints; midpoints.resize(points.size()-1); int pc=1; for(int i=0;i<points.size()-1;i++) { _bake_segment2d(midpoints[i],0,1,points[i].pos,points[i].out,points[i+1].pos,points[i+1].in,0,p_max_stages,p_tolerance); pc++; pc+=midpoints[i].size(); } tess.resize(pc); Vector2Array::Write bpw=tess.write(); bpw[0]=points[0].pos; int pidx=0; for(int i=0;i<points.size()-1;i++) { for(Map<float,Vector2>::Element *E=midpoints[i].front();E;E=E->next()) { pidx++; bpw[pidx] = E->get(); } pidx++; bpw[pidx] = points[i+1].pos; } bpw=Vector2Array::Write (); return tess; }
Vector2Array Curve2D::tesselate(int p_max_stages,float p_tolerance) const { Vector2Array tess; if(points.size()==0) { return tess; } std::vector< std::map<float,Vector2> > midpoints; midpoints.resize(points.size()-1); int pc=1; for(int i=0;i<points.size()-1;i++) { _bake_segment2d(midpoints[i],0,1,points[i].pos,points[i].out,points[i+1].pos,points[i+1].in,0,p_max_stages,p_tolerance); pc++; pc+=midpoints[i].size(); } tess.resize(pc); tess[0]=points[0].pos; int pidx=0; for(int i=0;i<points.size()-1;i++) { for(std::map<float,Vector2>::const_iterator itr = midpoints[i].begin(); itr != midpoints[i].end(); ++itr) { pidx++; tess[pidx] = itr->second; } pidx++; tess[pidx] = points[i+1].pos; } return tess; }
Dictionary Curve2D::_get_data() const { Dictionary dc; Vector2Array d; d.resize(points.size()*3); Vector2Array::Write w = d.write(); for(int i=0;i<points.size();i++) { w[i*3+0]=points[i].in; w[i*3+1]=points[i].out; w[i*3+2]=points[i].pos; } w=Vector2Array::Write(); dc["points"]=d; return dc; }