How can I place a diagonal dimension between these markers in 3D and not Ortho?

Aligned dim fails to put a dimension centre to centre on these ‘markers’ when placed in perspective view.
If I do so in ortho view the dim does not travel from marker to marker.
Bott left to middle right I hope is 54 inches measured on site on the front face. for example but I am unable to get a dimension with arrows and number to sit between the two.
They have been plotted from site measurements in a side view and now I want to see what they measure as on the front face of the object.

Aligned are for ortho views, what dims are there for angled work in 3D space ?

markers need diagonal dims between.3dm (71.6 KB)


DimAligned works on the Cplane, so set Cplane accordingly for each dimension placed in the Perspective View.


1 Like

Thats v bad news for me, as :-
Thats a lot of separate C plane creations, is there no way to do this any other way as I am trying to place these markers in 3D space given the constraints of the dims to a certain marker from its nearest neighbours, and from each of those to others and the buttress has varying twisting faces and Cplanes want planar faces, i.e 4 markers are not planar, so Cplanes is not really fitting here, I need to click between two markers and get a dimension to appear, a tail chase is resulting, but having to try and work out the orientation of Cplanes as well, and I always end up with them never restoring back to what I had been using, me and Cplanes dont seem to get on well.
Surely Rhino must know the distance in 3D space between two points and create a dimension with such ?

If you don’t have a surface to attach the CPlane to, you could draw construction lines between the markers and set CPlane to Object

1 Like

A fundamental rule in Rhino is all dimension annotations are created coplanar to the CPlane in the current Viewport.

An old drafting rule was a dimension should never be drawn that can not be checked with a scale.

1 Like

You don’t even need to draw a line. Set x axis to the points with 1 click to start the command and the 2 clicks to set the axis. No line to delete or clutter your model.
set cplane by x axis

The question is not if “Rhino knows” the distance, but how you want the measurement to be made.

I think you want a setting that moves the cplane automatically to align one axis to the shortest distance between the points you want to measure. This might be a useful option but I think for now you can achieve the result fairly quickly with the tools that are already there.

Getting comfortable with cplanes is a fundamental prerequisite to using Rhino effectively. Otherwise I think you will struggle unnecessarily.


It is 52.1" on your model…

Thanks to @BrianM and @abrahamwechter - I didn’t know you could set the cplane like this and have the dimension “stick” after changing it back. But as @John_Brock says, dimensions should be in the drawing planes. If you place this dimension in the perspective view the you’ll see it in the other views and there would be nothing there to indicate that it is inclined, so it would be misleading. If you must have it, then I’d recommend adding a warning to the value:

And put it on a separate layer from the other dims so you can exclude it from orthogonal views in Layouts.


typo: can = cannot!

(The other rule - written on each drawing but oft ignored - was “Do not scale from this drawing”…)

1 Like

Fixed! Thank you!

I made this script a while back, maybe it’s useful for you:

def mark_distance():
    draws a line with arrows and dot annotation with the distance between the
    two picked points
    import Rhino
    import rhinoscriptsyntax as rs
    import scriptcontext as sc
    result = rs.GetLine(0,message1 = "pick two points")
    if not result:
        pt1, pt2 = result
    if not pt1 or not pt2:
    line  = Rhino.Geometry.Line(pt1, pt2)
    length = round(line.Length,3)
    mid = (pt1+pt2)/2
    newline = sc.doc.Objects.AddLine(line)
    dot = rs.AddTextDot(str(length),mid)
    groupname = rs.AddGroup("dim-3d : "+str(length))
    rs.AddObjectsToGroup([newline, dot],groupname)
if __name__ == "__main__":  

1 Like