View range celling

Good morning
I am trying to modify the ceiling view view ranges. but I can’t set the upper level for the high and low range.
I’m coming a little with the plan views.
I understand that we can use the words “Unlimited” / LevelBelow. But I can not.
Can you help me understand?

Sorry a work in french

import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference('RevitServices')
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

def modViewRange(vp, tof, bof, cof, dof, view):
    """
    Fonction pour modifier la plage de vue d'une vue 3D.

    Args:
        vp (Element): La vue 3D à modifier.
        tof (float): Le décalage du plan de coupe supérieur.
        bof (float): Le décalage du plan de coupe inférieur.
        cof (float): Le décalage du plan de coupe.
        dof (float): Le décalage du plan de profondeur.
        chl (Level): Le niveau de référence pour les plans de coupe et de profondeur.

    """
    v = UnwrapElement(vp)

    # Obtention de la plage de vue de la vue
    viewRange = v.GetViewRange()
    assLvl = v.GenLevel
    
    vueHaute = UnwrapElement(view)
    viewRangex = vueHaute.GetViewRange()
    LVLH = vueHaute.GenLevel

    # Réglage du plan de coupe supérieur de la plage de vue
    viewRange.SetLevelId(PlanViewPlane.TopClipPlane, assLvl.Id)  #possible de mettre "Unlimited" / LevelBelow
    viewRange.SetOffset(PlanViewPlane.TopClipPlane, tof)

    # Réglage du plan de coupe inférieur de la plage de vue
    viewRange.SetLevelId(PlanViewPlane.BottomClipPlane, assLvl.Id)
    viewRange.SetOffset(PlanViewPlane.BottomClipPlane, bof)

    # Réglage du plan de coupe de la plage de vue
    viewRange.SetOffset(PlanViewPlane.CutPlane, cof)

    # Réglage du plan de profondeur de la plage de vue
    viewRange.SetLevelId(PlanViewPlane.ViewDepthPlane, assLvl.Id)
    viewRange.SetOffset(PlanViewPlane.ViewDepthPlane, dof)

    if bof < 0:
        viewRange.SetOffset(PlanViewPlane.ViewDepthPlane, bof)
    else:
        viewRange.SetOffset(PlanViewPlane.ViewDepthPlane, 0)

    # Application de la plage de vue à la vue
    v.SetViewRange(viewRange)

doc = DocumentManager.Instance.CurrentDBDocument

# Supposons que IN[1], IN[2], IN[3] et IN[4] sont des listes contenant des paramètres pour chaque sous-liste de IN[0]
cof_list = IN[1]  # Zone de coupe
tof_list = IN[2]  # Plage de vue haute
bof_list = IN[3]  # Plage de vue base
dof_list = IN[4]  # Profondeur de vue

views_list = IN[5]

count = 0

TransactionManager.Instance.EnsureInTransaction(doc)
if isinstance(IN[0], list):
    for i, sublist in enumerate(IN[0]):  # Parcourir chaque sous-liste
        if isinstance(sublist, list):
            for vp in sublist:
                modViewRange(vp, tof_list[i], bof_list[i], cof_list[i], dof_list[i], views_list)
                count += 1
        else:
            modViewRange(IN[0], tof_list[0], bof_list[0], cof_list[0], dof_list[0], views_list)
            count += 1
TransactionManager.Instance.TransactionTaskDone()

OUT = '%d plages de vue modifiées' % (count)

For Ceiling Plan ViewRange - Bottom is derived from the Cut Plane so cannot be modified
If your Top is higher than the View Depth (tof > dof) you will not be able to set
Genius Loci have a Set ViewRange custom node which may be worth trying or reviewing the python code

1 Like