Adding Blocks to all parcels and rotating to parcel frontage

Hi. I am totally new to Dynamo and have been watching a bunch of how to videos. For my company, I am trying to find a way to do the following:

Insert a block (House Pad) in the middle (centroid) of all parcels in a site. We would prefer to have this automatically rotated toward the frontage of the parcel.

Now, optimally it would be great if we could have it rotated and place at a user defined distance (front setback) from that frontage, but we are fine with just getting the block in the center, if easier. Besides the dynamo aspect of it all, do I need to make sure my block is set up a specific way so it know where the front is on the block? Would it just be making sure the insert point is at the front center of the house pad and maybe add a rotation parameter from there towards the front of the pad?

To simplify, this is what we were thinking of…not sure if its the best workflow:

1.) Insert Block (user input-block name) to Centroid of all parcels of a specific style (user input).
2.) Rotate Block to be perpendicular with: Parcel Frontage? or R/W layer (user input)?
3.) Move block to specific distance (user input) from R/W layer…i.e. front setback distance.

Unfortunately, I have no idea how to begin in Dynamo. Any help/tips would be appreciated.

I always recommend starting automation development by building a ā€mapā€ of your logic and steps - best part about this is you don’t need any dynamo to do it which means you already know everything you need to. Now I don’t have a data set and know nothing of how your firm operates, but this steps below might make a good sequence for you to build out, and at a minimum can help you build your own map.

  1. Get all road alignment curves
  2. Offset the road alignment curves by (+ 1/2 of the roadway width + any parcel setback distance) and (- 1/2 of the roadway width - any parcel setback distance).
  3. Loft between the offset
  4. Curves to build a surface representing the road surface,
  5. Union the road surfaces into one.
  6. Extract the plot boundaries
  7. Check each boundary curve for intersection with the expanded road surface and discard any which don’t intersect the road.
  8. Get the longest of the remaining line segments
  9. Find the coordinate system at parameter 0.5
  10. Move the coordinate system along its X axis by the desired offset distance.
  11. Create a block reference at the coordinate system.

Thanks for the help. I think initially we are going to focus on getting the blocks insert onto all parcels and hopefully work out the rotation issue and not worry about setting it a specific distance for setbacks yet. Attached is what I have so far. This works as far as inserting a block onto all parcels at the label point. But I do not know what to do about the rotation.

We don’t always have alignments or corridors done at the time of wanting to show building pads. We do have specific layer names for the R/W, lot lines, centerlines and curbing. And I would think the parcels themselves have ā€œfrontageā€ data based on how the were created. If possible, how do you go about setting a blocks rotating based on being perpendicular between the parcel label and the closest R/W line? Or is there a better way to do that?

Also, in the Site.Parcels box, it grabs all parcels in the site. Is there a way to select certain Parcel Styles within the site to filter that down further than grabbing all parcels? I see they list the Parcel data as Parcel (Name= ā€œParcel Style Nameā€ā€¦etc) So I do you create an input similar to the Choose Site Name, but would be Choose Parcel Style?

-Craig

Can you post a sample DWG and that graph?

Also which build of Civil 3D are you using?

InsertBlocksIntoAllParcels.dyn (26.9 KB)

DYNAMO TEST.dwg (2.5 MB)

See attached. I am using Civil 3d 2026.

Let me know if you need anything else.

Thanks for your help!

-Craig

Something for you to try:

The specific setup of your drawing will matter quite a bit here. In particular if your ā€˜edge of conc’ lines aren’t closed curves; or if they have inconsistent Z heights; or if other info about them changes you’re potentially in trouble getting this to work. Moving drawing those as curves to utilization of alignments would help.

Geometry in Dynamo should look like this for the file provided.

And in the DWG:

Note that lots like ā€˜7’ make determining ā€˜front lot line’ hard. I’m just assuming the longest curve that makes up the geometry for now.

Thanks. I’ll try that and see how it runs. I’m not worried about corner lots too much, i can always adjust those manually after.

What are the setback tolerance and Tag Inset Distance referring to?

Also, any way you can share your graph?

This is the maximum distance from the public way (surface) to a midpoint of a lot line which is a ā€˜frontage’ line.

This is the distance from the lot line to the block insertion point.

Give it a shot solo - I’m traveling and won’t have access to that graph for a day or so.

@jacob.small I was able to get it working on that first test file, but I am having a rotation problem with this specific block (GEC-Dyn_Pad). See attached files. The block seems to be rotated 90 degrees form where I would want it. I tried it with a turn-arrow block as well and same issue. What would I need to change to correct this?

Also, I tried the same a couple of other test files and they are throwing up errors. What can I do to make sure other files work? Is it a linework issue?

Also, I can’t find the New Block References/Review the results at the end of your graph. DO you know where to find that to add to mine?

Here are the test files I have been using and the updated graph.

test-InsertBlocksIntoAllParcels.dyn (143.4 KB)

DYNAMO TEST2.dwg (2.6 MB)

Alt-test.dwg (2.8 MB)

alt-TEST3.dwg (2.6 MB)

After you confirm the Z axis alignment, rotate the coordinate system on the XY plane by 90 degrees (or -90 depending how your stuff is set up). Layout should look like the Z axis alignment bit.

Depends on the error - copy the text and we can review, but generally you’ll have to learn a bit Dynamo to manage such issues.

This was a renamed ā€˜watch’ node set as an output. :slight_smile:

I altered and added a couple things to get the block to rotate, but with no luck. I’m really not sure where to add it and where to get all the parameters from. Also tried adding a rotate object at the end of it all with no luck.

I’m getting different errors with different files. Some say Dereferencing a non-pointer, another says:Surface.TrimWithEdgeLoops operation failed. Failed to trim surface with polycurve loops. : FACE_SELF_INTER – self-intersecting face

All the files have been audited and purged. I’ve used overkill and mapclean to make sure the linework was good and not overlapping. I joined everything and made it closed then exploded, but no luck on other files.

First error is something failing to return results, usually in the previous node. Second is possibly a geometry scaling error, or a poorly constructed set of curves for the public way. Can’t tell which, but the curve set should be really identifiable in CAD - isolate the layer, try to build a polyp e, etc.

I’ve tried 10 different drawings and other than the first one, give me errors.

Most of the them have error starting in this node

:

A few have it in this node:

I’m not sure what I should be looking for in the curve set. If you are just talking about the edge of asphalt linework, it is clean as far as I can see. They are all LW Polylines. I ran mapclean on them, as well as overkill. Joined them all as a closed polyline and re-expoded as well. None have elevations associated with them and all are parallel the UCS. All these drawings were set up in the same company template as well and no changes were made to any default coordinate systems. Is there something else I should look for?

When a node fails, you need to look at the data which is fed into it.

So on the error List.FirstItem operation failed. Index of out of range. you need to expand the data preview of the List.FilterByBoolMask node or insert a ā€˜watch’ node to see what is returned by the ā€˜in’ output. My guess is Geometry.DoesIntersect node failed to find a single intersection.

On the error Surface.TrimWithEdgeLoops operation failed. Failed to trim wsurface with polycurve loops : face self intersection it’s telling you that one of the trimming elements is causing the element ot intersect itself. Perhaps two curves overlap?

Should I just be looking at the edge of travel lane layer or other layers beside that’s? I wasn’t sure what those nodes may be looking at.

Perhaps - I don’t know how your drawing is set up; I would have used alignments for defining the roads which makes this all much easier.

If I only have to create alignments and not create any profiles, I can do that quickly if its much easier that way. Is that all you need, just a basic alignment?

If you have an alignment, and you now the intended distance from the alignment to the face of the parcel, that works well as you can extract the curve of the alignment, offset it by the (distance + tolerance) * [-1,1]; and loft the resulting shapes into a surface.

If you already have edge of curb lines which form closed limits of your pavement, those also work.

The difficulty comes in not having a known standard to work to, and deviating from said standard.

Thanks. Attached is one of the files that kept coming up with errors. I have added alignments to all the roads and also included the graph as it is currently. When you have time, please let me know what need to be changed to make it work better. I am not worried about cul-de-sac or corner lots being perfect, if they cause issues. I have included the GEC-DYN SEPTIC PAD block in the cad file in the NE corner. The goal is to have the house pad properly rotated to the driveway is facing the center of the road.

Any help would be greatly appreciated. Have a great weekend and thanks for all your help!

-Craig

test-InsertBlocksIntoAllParcels.dyn (145.5 KB)

Alt-test.dwg (2.6 MB)