I’m learning Dynamo in Civil 3D and trying to understand how to automate labeling the intersection points of side alignments (intersecting alignments) on the main alignment’s Profile View. For example, adding vertical lines, markers, and labels showing the side alignment name, station, and elevation at the crossing point.
The manual “Add Crossings to Profile View” command works well, but I’d like to explore automating it with Dynamo, especially in Civil 3D 2025 or later (where new labeling nodes like ProfileViewStationElevationLabel and ProfileViewDepthLabel are available).
My planned approach:
Get a list of side alignments.
Find intersection points with the main alignment (using Geometry.Intersect or Alignment.IntersectWith nodes).
Extract the station on the main alignment (using Alignment.StationAtPoint).
Calculate the elevation (from the side profile if available, or from a surface).
Add Station/Elevation labels (or General Note labels for custom text like “Side Road: [Name] - Station [X]”).
Does anyone have a sample script, Dynamo graph, or step-by-step guidance for this? Would the Camber package help, or are the built-in nodes sufficient?
Thanks for any tips – this is purely for learning Dynamo workflows!
Short answer is sadly that you can’t do it using Projection objects as Projection object creation is not exposed in the API. This is something I have been asking for for years now:
As a workaround you can create static objects by determining station and elevation and create static objects, like text/mtext/block reference at the corresponding locations in the profile view, but you have to do it every time something changes.
I’m a bit late to this, but I think you’re definitely on the right track.
My approach would be fairly similar and I’ll attach my sample script + screenshot below, but do know I don’t have a surface or profile on hand to test it fully but hopefully it’s a good starting point for you.
First obtain your list of side alignments.
Use Geometry.Intersect to determine intersection points between side and main alignments.
Aligmment.IntersectWith can’t be used unless you create polylines of your side alignments to represent them, since this node only detects intersecting polylines.
Extract the station using Alignment.StationOffsetByPoint (Don’t have Alignment.StationAtPoint that you mention, might be a CAD version difference.)
Use Surface.ElevationAtXY to extract elevation of surface at intersection points. Or can use ElevationByStation to determine it on the profile itself since you have the station.
Add station/elevation labels, could be done in a number of ways depending on your workflow and what you want for labels. The Civil Nodes package has a node to add ElevationStationLabels on profile views, though I haven’t played around with it a ton, so might take some tinkering.