//=========================================================================== RectDomain CurveBoundedDomain::containingDomain() const //=========================================================================== { RectDomain dom; if ((*loops_[0])[0]->dimension() == 2) { // We've got a parametric bound BoundingBox b = (*loops_[0])[0]->boundingBox(); int n1 = (int)loops_.size(); int i, j; for (j=0; j<n1; j++) { int n2 = loops_[j]->size(); for (i = (j==0)?1:0; i < n2; ++i) { b.addUnionWith((*loops_[j])[i]->boundingBox()); } } dom = RectDomain(Array<double, 2>(b.low()[0], b.low()[1]), Array<double, 2>(b.high()[0], b.high()[1])); } else { // We should have a bound consisting of CurveOnSurface objects, // and we'll throw an exception if it's not! const CurveOnSurface& cv0 = dynamic_cast<const CurveOnSurface&>(*(*loops_[0])[0]); dom = cv0.containingDomain(); int n1 = (int)loops_.size(); int i, j; for (j=0; j<n1; j++) { int n2 = loops_[j]->size(); for (i = (j==0)?1:0; i < n2; ++i) { const CurveOnSurface& cv1 = dynamic_cast<const CurveOnSurface&>(*(*loops_[j])[i]); dom.addUnionWith(cv1.containingDomain()); } } } return dom; }