Hi,
any ideas how to trigger Rebuild() for Corridors?
The script updates AppliedSubassembly parameters in all sections, then all BaselineRegions and Baselines are manually flagged as NeedsProcessing. Despite all of that neither Corridor.Rebuild() nor the Rebuild node does the corridor update. Only sending the FORCEUPDATECORRIDOR command triggers the rebuilding.
Thanks.
import clr
import System
# Load necessary Civil 3D and AutoCAD .NET Assemblies
clr.AddReference('AcMgd')
clr.AddReference('AcCoreMgd')
clr.AddReference('AcDbMgd')
clr.AddReference('AecBaseMgd')
clr.AddReference('AecPropDataMgd')
clr.AddReference('AeccDbMgd')
# Import core AutoCAD and Civil 3D namespaces
from Autodesk.AutoCAD.ApplicationServices import Application
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.Civil.DatabaseServices import *
# Get the active document
adoc = Application.DocumentManager.MdiActiveDocument
db = adoc.Database
# --- Dynamo Input ---
corridor_input = IN[0]
# --- Output List Initialization ---
all_applied_subassemblies_structured = []
# --- Step 1: Unwrap the Corridor Input ---
corridor_object_id = None
if corridor_input:
try:
corridor_object_id = corridor_input.InternalObjectId
except AttributeError:
pass
if corridor_object_id:
with adoc.LockDocument():
with db.TransactionManager.StartTransaction() as t:
try:
corridor_db_obj = t.GetObject(corridor_object_id, OpenMode.ForWrite)
if isinstance(corridor_db_obj, Corridor):
for baseline_item in corridor_db_obj.Baselines:
baseline_obj = None
if isinstance(baseline_item, ObjectId):
baseline_obj = t.GetObject(baseline_item, OpenMode.ForWrite)
elif isinstance(baseline_item, Baseline):
baseline_obj = baseline_item
else:
continue
if isinstance(baseline_obj, Baseline):
for region_item in baseline_obj.BaselineRegions:
region_obj = None
if isinstance(region_item, ObjectId):
region_obj = t.GetObject(region_item, OpenMode.ForWrite)
elif isinstance(region_item, BaselineRegion):
region_obj = region_item
region_obj.NeedsProcessing = True
baseline_obj.NeedsProcessing = True
#adoc.SendStringToExecute("forceupdateallcorridors ",True,False,True)
except Exception as e:
errormessage = (["Transaction Failed", str(e)])
t.Commit()
with adoc.LockDocument():
with db.TransactionManager.StartTransaction() as t:
try:
corridor_db_obj = t.GetObject(corridor_object_id, OpenMode.ForWrite)
state = corridor_db_obj.IsOutOfDate
corridor_db_obj.Rebuild()
result = "done"
except Exception as e:
errormessage = (["Transaction Failed", str(e)])
t.Commit()
OUT = state, result
