Use a switch statement for handling geometry types.

PiperOrigin-RevId: 837097811
Change-Id: Ic473f9da3d4189430e98670afdae7bb3cca5ccbc
This commit is contained in:
Haroon Qureshi
2025-11-26 06:39:33 -08:00
committed by Copybara-Service
parent aa25075ea4
commit 0425355efc
+39 -16
View File
@@ -72,51 +72,74 @@ static constexpr int kArrow2BottomConeDisk = 4;
Drawable::Drawable(ObjectManager* object_mgr, const mjvGeom& geom) Drawable::Drawable(ObjectManager* object_mgr, const mjvGeom& geom)
: material_(object_mgr), : material_(object_mgr),
renderables_(object_mgr->GetEngine()) { renderables_(object_mgr->GetEngine()) {
if (geom.type == mjGEOM_MESH) { switch ((mjtGeom)geom.type) {
case mjGEOM_MESH:
AddMesh(geom.dataid); AddMesh(geom.dataid);
} else if (geom.type == mjGEOM_HFIELD) { break;
case mjGEOM_HFIELD:
AddHeightField(geom.dataid); AddHeightField(geom.dataid);
} else if (geom.type == mjGEOM_PLANE) { break;
case mjGEOM_PLANE:
AddShape(ObjectManager::kPlane); AddShape(ObjectManager::kPlane);
} else if (geom.type == mjGEOM_SPHERE) { break;
case mjGEOM_SPHERE:
AddShape(ObjectManager::kSphere); AddShape(ObjectManager::kSphere);
} else if (geom.type == mjGEOM_ELLIPSOID) { break;
case mjGEOM_ELLIPSOID:
AddShape(ObjectManager::kSphere); AddShape(ObjectManager::kSphere);
} else if (geom.type == mjGEOM_BOX) { break;
case mjGEOM_BOX:
AddShape(ObjectManager::kBox); AddShape(ObjectManager::kBox);
} else if (geom.type == mjGEOM_CAPSULE) { break;
case mjGEOM_CAPSULE:
AddShape(ObjectManager::kTube); AddShape(ObjectManager::kTube);
AddShape(ObjectManager::kDome); AddShape(ObjectManager::kDome);
AddShape(ObjectManager::kDome); AddShape(ObjectManager::kDome);
} else if (geom.type == mjGEOM_CYLINDER) { break;
case mjGEOM_CYLINDER:
AddShape(ObjectManager::kTube); AddShape(ObjectManager::kTube);
AddShape(ObjectManager::kDisk); AddShape(ObjectManager::kDisk);
AddShape(ObjectManager::kDisk); AddShape(ObjectManager::kDisk);
} else if (geom.type == mjGEOM_ARROW) { break;
case mjGEOM_ARROW:
AddShape(ObjectManager::kTube); AddShape(ObjectManager::kTube);
AddShape(ObjectManager::kCone); AddShape(ObjectManager::kCone);
AddShape(ObjectManager::kDisk); AddShape(ObjectManager::kDisk);
} else if (geom.type == mjGEOM_ARROW1) { break;
case mjGEOM_ARROW1:
AddShape(ObjectManager::kTube); AddShape(ObjectManager::kTube);
AddShape(ObjectManager::kCone); AddShape(ObjectManager::kCone);
AddShape(ObjectManager::kDisk); AddShape(ObjectManager::kDisk);
AddShape(ObjectManager::kDisk); AddShape(ObjectManager::kDisk);
} else if (geom.type == mjGEOM_ARROW2) { break;
case mjGEOM_ARROW2:
AddShape(ObjectManager::kTube); AddShape(ObjectManager::kTube);
AddShape(ObjectManager::kCone); AddShape(ObjectManager::kCone);
AddShape(ObjectManager::kCone); AddShape(ObjectManager::kCone);
AddShape(ObjectManager::kDisk); AddShape(ObjectManager::kDisk);
AddShape(ObjectManager::kDisk); AddShape(ObjectManager::kDisk);
} else if (geom.type == mjGEOM_LINE) { break;
case mjGEOM_LINE:
AddShape(ObjectManager::kLine); AddShape(ObjectManager::kLine);
} else if (geom.type == mjGEOM_LINEBOX) { break;
case mjGEOM_LINEBOX:
AddShape(ObjectManager::kLineBox); AddShape(ObjectManager::kLineBox);
} else if (geom.type == mjGEOM_TRIANGLE) { break;
case mjGEOM_TRIANGLE:
AddShape(ObjectManager::kTriangle); AddShape(ObjectManager::kTriangle);
} else if (geom.type == mjGEOM_FLEX || geom.type == mjGEOM_SKIN) { break;
case mjGEOM_FLEX:
case mjGEOM_SKIN:
// Flex and skin geometries are dynamically updated every frame. // Flex and skin geometries are dynamically updated every frame.
} else { break;
case mjGEOM_NONE:
case mjGEOM_LABEL:
// Do nothing .
break;
case mjGEOM_SDF:
case mjNGEOMTYPES:
mju_warning("Unsupported geom type: %d", geom.type); mju_warning("Unsupported geom type: %d", geom.type);
break;
} }
} }