Automatic dimensioning of (multiple) detail lines

Hi JN,

Have you tried setting the lacing of the custom node that you created to Longest?

Otherwise you could use a for loop in Python:

import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)

clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument

if isinstance(IN[0], list):
	lines = []
	for i in IN[0]:
		lines.append(UnwrapElement(i))
else:
	lines = [UnwrapElement(IN[0])]


crvs = []

for line in lines:
	crvs.append(line.GeometryCurve)
	

TransactionManager.Instance.EnsureInTransaction(doc)


for crv in crvs:
	ref = ReferenceArray()
	ref.Append(crv.GetEndPointReference(0))
	ref.Append(crv.GetEndPointReference(1))
	dim = doc.Create.NewDimension(doc.ActiveView, crv, ref)

TransactionManager.Instance.TransactionTaskDone()

OUT = dim

I use an offset to position the dimension:

and the python code becomes:

    import clr
    clr.AddReference('RevitAPI')
    from Autodesk.Revit.DB import *

    clr.AddReference("RevitNodes")
    import Revit
    clr.ImportExtensions(Revit.Elements)
    clr.ImportExtensions(Revit.GeometryConversion)

    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager

    doc = DocumentManager.Instance.CurrentDBDocument

    if isinstance(IN[0], list):
    	lines = []
    	for i in IN[0]:
    		lines.append(UnwrapElement(i))
    else:
    	lines = [UnwrapElement(IN[0])]


    crvs = []

    for line in lines:
    	crvs.append(line.GeometryCurve)


    if isinstance(IN[1], list):
    	linea = []
    	for i in IN[1]:
    		linea.append(UnwrapElement(i).ToRevitType())
    else:
    	linea = [UnwrapElement(IN[1]).ToRevitType()]


    TransactionManager.Instance.EnsureInTransaction(doc)


    for i in range (0,len(linea)):
    	ref = ReferenceArray()
    	ref.Append(crvs[i].GetEndPointReference(0))
    	ref.Append(crvs[i].GetEndPointReference(1))
    	dim = doc.Create.NewDimension(doc.ActiveView, linea[i], ref)



    TransactionManager.Instance.TransactionTaskDone()

    OUT = linea

image

8 Likes