Create diagonal dimension for wall (section view)

I have an idea to create diagonal dimension lines for this wall in the section view environment of Revit. I have obtained the 4 corner points of the wall. I tried using the nodes available in the package but it didn’t work. Do you have any solutions to he




Hi,
We don’t see anything from your screens
(zoom so that it is visible before using it

doesn’t matter if you don’t see all your nodes)
here is a potential avenue


code Block

S.X==C.X
&&
S.Y==C.Y;

Sincerely
christian.stan

1 Like

Hello @MeoTom and welcome :wink: iw ould try something here

2 Likes

hello, I’m going to go back to bed, I was way off topic (I hadn’t seen the Dimension)
@+ :wink:
cordially
christian.stan

heheh yeah it was a long one the headline :wink: but sleep well :wink: :wink:

1 Like

Hi,

a solution using edges Reference

import clr
import sys
import System
#
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import Autodesk.DesignScript.Geometry as DS

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

#import net library
from System import Array
from System.Collections.Generic import List, IList, Dictionary

clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)

#import transactionManager and DocumentManager (RevitServices is specific to Dynamo)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument

import itertools

def most_distant_pair_edges(wall):
    global opt
    horiz_edges = []
    for geo in wall.get_Geometry(opt):
        if isinstance(geo, DB.Solid):
            print(geo.Volume)
            for edge in geo.Edges:
                curve_edge = edge.AsCurve()
                if isinstance(curve_edge , DB.Line) and abs(curve_edge.Direction.Z) < 0.1:
                    horiz_edges.append(edge)

    pair_edges = [[e1, e2] for e1, e2 in itertools.combinations_with_replacement(horiz_edges, 2)]
    sort_distant_pair = sorted(pair_edges, 
                            key = lambda x : x[0].AsCurve().Distance(x[1].AsCurve().Evaluate(0.5, True)),
                            reverse = True )
    # returns the 2 most distant pairs 
    return sort_distant_pair[:2]

def toList(x):
    if isinstance(x, (list, dict)) or \
            (hasattr(x, "GetType") and x.GetType().GetInterface("ICollection") is not None):
        return x
    else : return [x]

#Preparing input from dynamo to revit
lstelems = toList(UnwrapElement(IN[0]))
current_view = doc.ActiveView
out = []

opt = Options()
opt.ComputeReferences = True
opt.View = doc.ActiveView

#Do some action in a Transaction
TransactionManager.Instance.EnsureInTransaction(doc)

for wall in lstelems:
    for edgeA, edgeB in most_distant_pair_edges(wall):
        pta = edgeA.AsCurve().Evaluate(0.5, True)
        ptb = edgeB.AsCurve().Evaluate(0.5, True)
        base_line = DB.Line.CreateBound(pta, ptb)
        #
        refArray = ReferenceArray()
        refArray.Append(edgeA.Reference)
        refArray.Append(edgeB.Reference)
        dim = doc.Create.NewDimension(current_view, base_line, refArray)
        out.append(dim)

TransactionManager.Instance.TransactionTaskDone()

OUT = out
4 Likes