void Entity::pick(const Rayf& ray, PickResult& pickResults) { float dist = bounds().intersectWithRay(ray, NULL); if (Math<float>::isnan(dist)) return; Vec3f hitPoint = ray.pointAtDistance(dist); EntityHit* hit = new EntityHit(*this, hitPoint, dist); pickResults.add(hit); }
void Brush::pick(const Rayf& ray, PickResult& pickResults) { float dist = bounds().intersectWithRay(ray, NULL); if (Math<float>::isnan(dist)) return; dist = Math<float>::nan(); Side* side = NULL; for (unsigned int i = 0; i < m_geometry->sides.size() && Math<float>::isnan(dist); i++) { side = m_geometry->sides[i]; dist = side->intersectWithRay(ray); } if (!Math<float>::isnan(dist)) { assert(side != NULL); Vec3f hitPoint = ray.pointAtDistance(dist); FaceHit* hit = new FaceHit(*(side->face), hitPoint, dist); pickResults.add(hit); } }