How to Split Contour Geometry, Move Sideways

Hi, I’m working on a Grasshopper definition where I need to:

  1. Split contour geometry (e.g., floor slabs or outlines) into individual levels.
  2. Move each contour sideways (along X or Y) by an increasing distance per level (e.g., 0, 100, 200 units).
  3. Align each contour’s Z-axis to 0 (flatten to the ground plane) while preserving its original level height.
  4. Account for the original contour level so that the final output retains vertical hierarchy but with horizontal offsets.

Current Issues:

  • When moving contours, the geometry “breaks” if levels are at different heights.
  • Using Move with Vector XYZ creates duplicates instead of offsetting per level.
  • Struggling to maintain data tree structure for alignment and offset logic.

Example Workflow Attempted:

  1. Used Surface Closest Point to extract contour levels.
  2. Tried Series + List Length for incremental offsets.
  3. Applied Move but lost vertical alignment or created overlapping geometry.

Request:
How can I:

  • Properly split and isolate contours per level?
  • Apply horizontal offsets while retaining vertical hierarchy?
  • Flatten each contour to Z=0 relative to its original level ?

Any tips or example definitions would be greatly appreciated!

Attachments:

  • Current Grasshopper file or screenshot of the problematic setup.

Thanks in advance!
Contour.gh (13.8 KB)

the file does not contain any geometry.

Test1.gh (12.0 KB)
Test1.3dm (45.9 KB)

i do not understand the task
hoped the geometry would help to understand…
what does “3” mean? down to z=0 or not?
what are your current Issues? geometry breaks?
these contours are flat. no need to flatten them.

sorry I can´t help

1 Like

I’ll try to interpret.
Test1 a.gh (22.3 KB)

1 Like

Yes, geometry breaks when special conditions are created, for example, if one of the shapes is raised relative to the other or when they are not connected.

yes, it looks like that, but the geometry still breaks and I can’t figure out why.

still not sure what you mean by breaking. the provided example does not show it?
Test_jvs_contours.gh (13.5 KB)

1 Like

Yes, it works as needed for my tasks. Thanks!!! If it’s not difficult, can you explain what my mistake is?

the problem is that “contour” gives the lowest section of a shape the first TreeAdress. and when the other shape has its lowest section on a different hight you get different adresses for the same hight.
since you were creating unions from these closed curves anyway I created a solid union from the breps first …
in cases when thats not possible (when the breps are not closed or you need the sections without union i´d go for Brep-plane-intersection and create the horizontal planes first to cut with.

have a nice weekend