| Line |
Branch |
Exec |
Source |
| 1 |
|
|
// SPDX-License-Identifier: BSD-3-Clause |
| 2 |
|
|
/// @file geom.cpp |
| 3 |
|
|
/// @brief UsdGeom's registry entries and the implicit shapes' extents, as UsdGeom computes them. |
| 4 |
|
|
#include "ernie/scene/schema/geom.h" |
| 5 |
|
|
|
| 6 |
|
|
namespace ernie { |
| 7 |
|
|
namespace { |
| 8 |
|
|
|
| 9 |
|
|
/// @return The axis index (0, 1, 2) of an `axis` token. |
| 10 |
|
4 |
int AxisIndex(const ExtentRows& rows, Token axis) { |
| 11 |
|
4 |
return rows.Text(axis).front() - 'X'; |
| 12 |
|
|
} |
| 13 |
|
|
|
| 14 |
|
13 |
auto CubeHalves(const ExtentRows& rows) { |
| 15 |
|
13 |
return [size = rows.Column<double>(Cube::kSize)](std::uint32_t row) { |
| 16 |
|
13 |
return glm::dvec3(0.5 * size[row]); |
| 17 |
|
13 |
}; |
| 18 |
|
|
} |
| 19 |
|
|
|
| 20 |
|
185 |
auto SphereHalves(const ExtentRows& rows) { |
| 21 |
|
185 |
return [radius = rows.Column<double>(Sphere::kRadius)](std::uint32_t row) { |
| 22 |
|
12764 |
return glm::dvec3(radius[row]); |
| 23 |
|
185 |
}; |
| 24 |
|
|
} |
| 25 |
|
|
|
| 26 |
|
|
/// Cylinders, cones and capsules: a radius about the axis; capsules' caps add it along the axis. |
| 27 |
|
3 |
template <bool kCapped> auto RoundHalves(const ExtentRows& rows) { |
| 28 |
|
3 |
return [&rows, radius = rows.Column<double>(Cylinder::kRadius), |
| 29 |
|
3 |
height = rows.Column<double>(Cylinder::kHeight), |
| 30 |
|
3 |
axis = rows.Column<Token>(Cylinder::kAxis)](std::uint32_t row) { |
| 31 |
|
|
glm::dvec3 half(radius[row]); |
| 32 |
|
|
half[AxisIndex(rows, axis[row])] = 0.5 * height[row] + (kCapped ? radius[row] : 0.0); |
| 33 |
|
|
return half; |
| 34 |
|
3 |
}; |
| 35 |
|
|
} |
| 36 |
|
|
|
| 37 |
|
1 |
auto PlaneHalves(const ExtentRows& rows) { |
| 38 |
|
2 |
return [&rows, width = rows.Column<double>(Plane::kWidth), |
| 39 |
|
1 |
length = rows.Column<double>(Plane::kLength), |
| 40 |
|
1 |
axis = rows.Column<Token>(Plane::kAxis)](std::uint32_t row) { |
| 41 |
|
1 |
const int normal = AxisIndex(rows, axis[row]); |
| 42 |
|
|
// Width lies along x, or z for an X normal; length along y, or z for a Y normal. |
| 43 |
|
1 |
glm::dvec3 half(0.0); |
| 44 |
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 time.
|
1 |
half[normal == 0 ? 2 : 0] = 0.5 * width[row]; |
| 45 |
1/2
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
|
2 |
half[normal == 1 ? 2 : 1] = 0.5 * length[row]; |
| 46 |
|
1 |
return half; |
| 47 |
|
1 |
}; |
| 48 |
|
|
} |
| 49 |
|
|
|
| 50 |
|
|
} // namespace |
| 51 |
|
|
|
| 52 |
10/20
✓ Branch 0 taken 148 times.
✓ Branch 1 taken 1011 times.
✓ Branch 3 taken 148 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 148 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 148 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 148 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 148 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 148 times.
✓ Branch 23 taken 444 times.
✓ Branch 24 taken 148 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
2047 |
ERNIE_DEFINE_SCHEMA(Imageable, Abstract, kInheritExtent, ERNIE_IMAGEABLE_ATTRIBUTES) |
| 53 |
9/16
✓ Branch 0 taken 147 times.
✓ Branch 1 taken 4475 times.
✓ Branch 3 taken 147 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 147 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 147 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 147 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 147 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 147 times.
✓ Branch 20 taken 147 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
|
4916 |
ERNIE_DEFINE_SCHEMA(Xformable, Abstract, kInheritExtent, ERNIE_XFORMABLE_ATTRIBUTES, |
| 54 |
|
|
.openNamespaces = {tokens::kXformOpPrefix}) |
| 55 |
8/14
✓ Branch 0 taken 147 times.
✓ Branch 1 taken 438 times.
✓ Branch 3 taken 147 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 147 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 147 times.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 147 times.
✓ Branch 16 taken 147 times.
✓ Branch 17 taken 147 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
|
879 |
ERNIE_DEFINE_SCHEMA(Boundable, Abstract, kInheritExtent, ERNIE_BOUNDABLE_ATTRIBUTES) |
| 56 |
10/20
✓ Branch 0 taken 147 times.
✓ Branch 1 taken 1463 times.
✓ Branch 3 taken 147 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 147 times.
✗ Branch 7 not taken.
✓ Branch 12 taken 147 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 147 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 147 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 147 times.
✗ Branch 22 not taken.
✓ Branch 25 taken 588 times.
✓ Branch 26 taken 147 times.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
|
2786 |
ERNIE_DEFINE_SCHEMA(Gprim, Abstract, kInheritExtent, ERNIE_GPRIM_ATTRIBUTES, |
| 57 |
|
|
.openNamespaces = {tokens::kPrimvarsPrefix}) |
| 58 |
|
|
// Grouping prims are where custom data lives, so they take attributes of any name. |
| 59 |
5/8
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 62 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 146 times.
✗ Branch 10 not taken.
|
208 |
ERNIE_DEFINE_SCHEMA(Xform, Concrete, kDescendantsExtent, ERNIE_NO_ATTRIBUTES, |
| 60 |
|
|
.openNamespaces = {"*"}) |
| 61 |
4/8
✓ Branch 0 taken 146 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 146 times.
✗ Branch 10 not taken.
|
146 |
ERNIE_DEFINE_SCHEMA(Scope, Concrete, kDescendantsExtent, ERNIE_NO_ATTRIBUTES, |
| 62 |
|
|
.openNamespaces = {"*"}) |
| 63 |
19/38
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 146 times.
✗ Branch 10 not taken.
✓ Branch 14 taken 146 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 146 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 146 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 146 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 146 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 146 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 146 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 146 times.
✗ Branch 36 not taken.
✓ Branch 38 taken 146 times.
✗ Branch 39 not taken.
✓ Branch 41 taken 146 times.
✗ Branch 42 not taken.
✓ Branch 44 taken 146 times.
✗ Branch 45 not taken.
✗ Branch 47 not taken.
✓ Branch 48 taken 146 times.
✓ Branch 51 taken 1752 times.
✓ Branch 52 taken 146 times.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 83 not taken.
✗ Branch 84 not taken.
|
3652 |
ERNIE_DEFINE_SCHEMA(GeomModelAPI, SingleApply, kInheritExtent, ERNIE_MODEL_API_ATTRIBUTES) |
| 64 |
9/18
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 146 times.
✗ Branch 10 not taken.
✓ Branch 13 taken 146 times.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 146 times.
✓ Branch 20 taken 438 times.
✓ Branch 21 taken 146 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
|
1024 |
ERNIE_DEFINE_SCHEMA(GeomSubset, Concrete, kNoExtent, ERNIE_SUBSET_ATTRIBUTES) |
| 65 |
7/12
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 138 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 146 times.
✓ Branch 14 taken 146 times.
✓ Branch 15 taken 146 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
576 |
ERNIE_DEFINE_SCHEMA(Cube, Concrete, ComputedExtent(CentredExtent<CubeHalves>), |
| 66 |
|
|
ERNIE_CUBE_ATTRIBUTES) |
| 67 |
7/12
✓ Branch 0 taken 147 times.
✓ Branch 1 taken 2064 times.
✓ Branch 3 taken 147 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 147 times.
✗ Branch 7 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 147 times.
✓ Branch 14 taken 147 times.
✓ Branch 15 taken 147 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
2505 |
ERNIE_DEFINE_SCHEMA(Sphere, Concrete, ComputedExtent(CentredExtent<SphereHalves>), |
| 68 |
|
|
ERNIE_SPHERE_ATTRIBUTES) |
| 69 |
8/16
✓ Branch 0 taken 147 times.
✓ Branch 1 taken 125 times.
✓ Branch 3 taken 147 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 147 times.
✗ Branch 7 not taken.
✓ Branch 11 taken 147 times.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 147 times.
✓ Branch 18 taken 441 times.
✓ Branch 19 taken 147 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
|
860 |
ERNIE_DEFINE_SCHEMA(Cylinder, Concrete, ComputedExtent(CentredExtent<RoundHalves<false>>), |
| 70 |
|
|
ERNIE_CYLINDER_ATTRIBUTES) |
| 71 |
8/16
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 119 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 11 taken 146 times.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 146 times.
✓ Branch 18 taken 438 times.
✓ Branch 19 taken 146 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
1141 |
ERNIE_DEFINE_SCHEMA(Cone, Concrete, ComputedExtent(CentredExtent<RoundHalves<false>>), |
| 72 |
|
|
ERNIE_CYLINDER_ATTRIBUTES) |
| 73 |
8/16
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 119 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 11 taken 146 times.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 146 times.
✓ Branch 18 taken 438 times.
✓ Branch 19 taken 146 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
1141 |
ERNIE_DEFINE_SCHEMA(Capsule, Concrete, ComputedExtent(CentredExtent<RoundHalves<true>>), |
| 74 |
|
|
ERNIE_CAPSULE_ATTRIBUTES) |
| 75 |
8/16
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 119 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 11 taken 146 times.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 146 times.
✓ Branch 18 taken 438 times.
✓ Branch 19 taken 146 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
1141 |
ERNIE_DEFINE_SCHEMA(Plane, Concrete, ComputedExtent(CentredExtent<PlaneHalves>), |
| 76 |
|
|
ERNIE_PLANE_ATTRIBUTES) |
| 77 |
|
|
|
| 78 |
|
|
} // namespace ernie |
| 79 |
|
|
|