float BccWorld::groupCurveLength(GeometryArray * geos) { float sum = 0.f; const unsigned n = geos->numGeometries(); unsigned i = 0; for(;i<n;i++) { BezierCurve * c = static_cast<BezierCurve *>(geos->geometry(i)); sum += c->length(); } return sum; }
bool BccWorld::createCurveGeometryFromFile() { if(!readCurveDataFromFile()) return false; m_allGeo = new GeometryArray; m_allGeo->create(m_curves->numCurves()); const unsigned n = m_curves->numCurves(); m_allGeo = new GeometryArray; m_allGeo->create(n); unsigned * cc = m_curves->counts(); Vector3F * cvs = m_curves->points(); m_totalCurveLength = 0.f; CurveBuilder cb; unsigned ncv; unsigned cvDrift = 0; unsigned i, j; for(i=0; i< n; i++) { ncv = cc[i]; for(j=0; j < ncv; j++) cb.addVertex(cvs[j + cvDrift]); BezierCurve * c = new BezierCurve; cb.finishBuild(c); m_totalCurveLength += c->length(); m_allGeo->setGeometry(c, i); cvDrift += ncv; } std::cout<<" n curves "<<n <<" total curve length: "<<m_totalCurveLength<<"\n"; m_numCurves = n; return true; }