BBox SpherePrimitive::wsBounds(Geo::Geometry::CPtr geometry) const { assert(geometry != NULL); assert(geometry->particles() != NULL); if (!geometry->particles()) { Log::warning("SpherePrimitive has no particles. " "Skipping bounds generation."); return BBox(); } BBox wsBBox; AttrVisitor visitor(geometry->particles()->pointAttrs(), m_params); Attr<V3f> wsCenter("P"); Attr<float> radius("radius"); for (AttrVisitor::const_iterator i = visitor.begin(), end = visitor.end(); i != end; ++i) { i.update(wsCenter); i.update(radius); wsBBox.extendBy(wsCenter.as<Vector>() + radius.as<Vector>()); wsBBox.extendBy(wsCenter.as<Vector>() - radius.as<Vector>()); } return wsBBox; }
BBox PointBase::wsBounds(Geo::Geometry::CPtr geometry) const { assert(geometry != NULL); assert(geometry->particles() != NULL); if (!geometry->particles()) { Log::warning("Rasterization primitive has no particles. " "Skipping bounds generation."); return BBox(); } BBox wsBBox; AttrVisitor visitor(geometry->particles()->pointAttrs(), m_params); for (AttrVisitor::const_iterator i = visitor.begin(), end = visitor.end(); i != end; ++i) { BBox pointBounds = pointWsBounds(i); wsBBox.extendBy(pointBounds); } return wsBBox; }