void OrXmlGeom::copyPrimitiveMesh(const vector<MyPoint3D>& pts, const vector<TriFaceIndex>& tis){ TriFaceIndex ti; // if(dorender){ // int baseIndex = vispoints.size(); // for(int i = 0; i < pts.size(); i++){ // vispoints.push_back(pts[i]); // } // for(int i = 0; i < tis.size(); i++){ // ti.Set(tis[i].data[0]+baseIndex, tis[i].data[1]+baseIndex, tis[i].data[2]+baseIndex); // visindexes.push_back(ti); // } // }else{ // int baseIndex = colpoints.size(); // for(int i = 0; i < pts.size(); i++){ // colpoints.push_back(pts[i]); // } // for(int i = 0; i < tis.size(); i++){ // ti.Set(tis[i].data[0]+baseIndex, tis[i].data[1]+baseIndex, tis[i].data[2]+baseIndex); // colindexes.push_back(ti); // } // } { int baseIndex = vispoints.size(); for(int i = 0; i < pts.size(); i++){ vispoints.push_back(pts[i]); } for(int i = 0; i < tis.size(); i++){ ti.Set(tis[i].data[0]+baseIndex, tis[i].data[1]+baseIndex, tis[i].data[2]+baseIndex); visindexes.push_back(ti); } } { int baseIndex = colpoints.size(); for(int i = 0; i < pts.size(); i++){ colpoints.push_back(pts[i]); } for(int i = 0; i < tis.size(); i++){ ti.Set(tis[i].data[0]+baseIndex, tis[i].data[1]+baseIndex, tis[i].data[2]+baseIndex); colindexes.push_back(ti); } } }
Cylinder::Cylinder(double _radius, double _height, int _n){ radius = _radius; half_height = _height/2.0; n = _n; double theta = 2*PI / (double)n; MyPoint3D p; for(int i = 0; i < n; i++){ double angle = theta * i; p.Set(radius*cos(angle), 0-half_height, radius*sin(angle)); points.push_back(p); } for(int i = 0; i < n; i++){ double angle = theta*i; MyPoint3D p(radius*cos(angle), 0+half_height, radius*sin(angle)); points.push_back(p); } TriFaceIndex fi; for(int i = 0 ; i < n - 2 ; i++){ fi.Set(0,i+1,i+2); indexes.push_back(fi); } for(int i = 0 ; i < n - 2 ; i++){ fi.Set(n+i+2,n+i+1,n); indexes.push_back(fi); } for(int i = 0; i < n-1; i++){ fi.Set(i+n,i+1,i); indexes.push_back(fi); fi.Set(n+i,n+i+1,i+1); indexes.push_back(fi); } fi.Set(n+n-1,0,n-1); indexes.push_back(fi); fi.Set(n+n-1,n,0); indexes.push_back(fi); }