With ARX, you can use Brep or AssocPersSubentIdPE, the later is a bit simpler to use.
AssocPersSubentIdPE will get you the faces, edges, and vertices of the solid. In the case of a cuboid, simply get all the edges and map them to a vertex
In this example each vertex should be mapped to three edges. You could then build a transformation matrix so you can accurately compute the dimensions.
It starts to get a lot harder with more complex shapes. There’s a few threads at the swamp discussing ideas how to work with I-beams, how to find the edge the run along the length
for reference
import traceback
from pyrx import Ap, Ax, Ge, Ed, Db, command
from collections import defaultdict
@command
def doit():
ps, id, pnt = Ed.Editor.entSel("\nPick it: \n", Db.Solid3d.desc())
solid = Db.Solid3d(id)
pe = Db.AssocPersSubentIdPE(solid.queryX(Db.AssocPersSubentIdPE.desc()))
edge_map = defaultdict(list[Ge.Curve3d])
for vrt in pe.getAllSubentities(solid, Db.SubentType.kVertexSubentType):
edge_map[pe.getVertexSubentityGeometry(solid, vrt)]
for edge in pe.getAllSubentities(solid, Db.SubentType.kEdgeSubentType):
crv = pe.getEdgeSubentityGeometry(solid, edge)
edge_map[crv.getStartPoint()].append(crv)
edge_map[crv.getEndPoint()].append(crv)
for k, v in edge_map.items():
for _crv in v:
Ed.Core.grDraw(_crv.getStartPoint(), _crv.getEndPoint(), 1, 0)
return