25 if (pair.first)
return (
const CylinderSurface *) &pair.first->surfaceRepresentation();
29 if (pair.second)
return (
const DiscSurface *) &pair.second->surfaceRepresentation();
32 const CylinderSurface *cyl1 = castToCylinder(
one);
33 const DiscSurface *disc1 = castToDisc(
one);
34 const CylinderSurface *cyl2 = castToCylinder(
two);
35 const DiscSurface *disc2 = castToDisc(
two);
38 if (std::abs(cyl1->center().z() - cyl2->center().z()) > 1.) {
39 return (std::abs(cyl1->center().z()) < std::abs(cyl2->center().z()));
41 return (cyl1->bounds().r() < cyl2->bounds().r());
43 if (disc1 and disc2) {
44 const DiscBounds *discbounds1 = (
const DiscBounds *) &disc1->bounds();
45 const DiscBounds *discbounds2 = (
const DiscBounds *) &disc2->bounds();
46 if (discbounds1->rMax() < discbounds2->rMin() + 1) {
49 if (discbounds1->rMin() > discbounds2->rMax() - 1) {
52 return (std::abs(disc1->center().z()) < std::abs(disc2->center().z()));
55 if ((cyl1 !=
nullptr) && (disc2 !=
nullptr)) {
56 const DiscBounds *discbounds = (
const DiscBounds *) &disc2->bounds();
57 if (cyl1->bounds().r() > discbounds->rMax() - 1) {
60 if (cyl1->bounds().r() < discbounds->rMin() + 1) {
63 return (std::abs(cyl1->center().z()) < std::abs(disc2->center().z()));
66 if ((disc1 ==
nullptr) || (cyl2 ==
nullptr)) {
67 throw std::logic_error(
"Unhandled surface combination.");
70 const DiscBounds *discbounds = (
const DiscBounds *) &disc1->bounds();
72 if (cyl2->bounds().r() > discbounds->rMax() - 1) {
76 if (cyl2->bounds().r() < discbounds->rMin() + 1) {
80 return (std::abs(cyl2->center().z()) > std::abs(disc1->center().z()));