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
+68 -45
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) {
AddMesh(geom.dataid); case mjGEOM_MESH:
} else if (geom.type == mjGEOM_HFIELD) { AddMesh(geom.dataid);
AddHeightField(geom.dataid); break;
} else if (geom.type == mjGEOM_PLANE) { case mjGEOM_HFIELD:
AddShape(ObjectManager::kPlane); AddHeightField(geom.dataid);
} else if (geom.type == mjGEOM_SPHERE) { break;
AddShape(ObjectManager::kSphere); case mjGEOM_PLANE:
} else if (geom.type == mjGEOM_ELLIPSOID) { AddShape(ObjectManager::kPlane);
AddShape(ObjectManager::kSphere); break;
} else if (geom.type == mjGEOM_BOX) { case mjGEOM_SPHERE:
AddShape(ObjectManager::kBox); AddShape(ObjectManager::kSphere);
} else if (geom.type == mjGEOM_CAPSULE) { break;
AddShape(ObjectManager::kTube); case mjGEOM_ELLIPSOID:
AddShape(ObjectManager::kDome); AddShape(ObjectManager::kSphere);
AddShape(ObjectManager::kDome); break;
} else if (geom.type == mjGEOM_CYLINDER) { case mjGEOM_BOX:
AddShape(ObjectManager::kTube); AddShape(ObjectManager::kBox);
AddShape(ObjectManager::kDisk); break;
AddShape(ObjectManager::kDisk); case mjGEOM_CAPSULE:
} else if (geom.type == mjGEOM_ARROW) { AddShape(ObjectManager::kTube);
AddShape(ObjectManager::kTube); AddShape(ObjectManager::kDome);
AddShape(ObjectManager::kCone); AddShape(ObjectManager::kDome);
AddShape(ObjectManager::kDisk); break;
} else if (geom.type == mjGEOM_ARROW1) { case mjGEOM_CYLINDER:
AddShape(ObjectManager::kTube); AddShape(ObjectManager::kTube);
AddShape(ObjectManager::kCone); AddShape(ObjectManager::kDisk);
AddShape(ObjectManager::kDisk); AddShape(ObjectManager::kDisk);
AddShape(ObjectManager::kDisk); break;
} else if (geom.type == mjGEOM_ARROW2) { case mjGEOM_ARROW:
AddShape(ObjectManager::kTube); AddShape(ObjectManager::kTube);
AddShape(ObjectManager::kCone); AddShape(ObjectManager::kCone);
AddShape(ObjectManager::kCone); AddShape(ObjectManager::kDisk);
AddShape(ObjectManager::kDisk); break;
AddShape(ObjectManager::kDisk); case mjGEOM_ARROW1:
} else if (geom.type == mjGEOM_LINE) { AddShape(ObjectManager::kTube);
AddShape(ObjectManager::kLine); AddShape(ObjectManager::kCone);
} else if (geom.type == mjGEOM_LINEBOX) { AddShape(ObjectManager::kDisk);
AddShape(ObjectManager::kLineBox); AddShape(ObjectManager::kDisk);
} else if (geom.type == mjGEOM_TRIANGLE) { break;
AddShape(ObjectManager::kTriangle); case mjGEOM_ARROW2:
} else if (geom.type == mjGEOM_FLEX || geom.type == mjGEOM_SKIN) { AddShape(ObjectManager::kTube);
// Flex and skin geometries are dynamically updated every frame. AddShape(ObjectManager::kCone);
} else { AddShape(ObjectManager::kCone);
mju_warning("Unsupported geom type: %d", geom.type); AddShape(ObjectManager::kDisk);
AddShape(ObjectManager::kDisk);
break;
case mjGEOM_LINE:
AddShape(ObjectManager::kLine);
break;
case mjGEOM_LINEBOX:
AddShape(ObjectManager::kLineBox);
break;
case mjGEOM_TRIANGLE:
AddShape(ObjectManager::kTriangle);
break;
case mjGEOM_FLEX:
case mjGEOM_SKIN:
// Flex and skin geometries are dynamically updated every frame.
break;
case mjGEOM_NONE:
case mjGEOM_LABEL:
// Do nothing .
break;
case mjGEOM_SDF:
case mjNGEOMTYPES:
mju_warning("Unsupported geom type: %d", geom.type);
break;
} }
} }