Toposurface from survey - reduce number of points

Hi all,
I have a DWG site survey from which I’m creating an existing site toposurface. Unfortunately I’m having to use the spot level information (not contours) to generate the points. Consequently each of those survey spot-levels generates 4 topo points at each end of the lines forming the cross (see the image), meaning there are four times as many points as is necessary. The site is quite large and the toposurface is difficult to manage in Revit with all those points.
Does anyone know if there is a way in Dynamo to consolidate the four points into one that is located at the intersection of the two lines (i.e. the mid-point of the 4 points)?
I haven’t yet begun to look at this in Dynamo, but would welcome any advice as to whether what I want to achieve is possible, and any clues as how to do it.

It seems like yor question is more easily answered in Civil3D, there are commands in there that move Text/Blocks to the Z value (either read from text or from specified attribute).

Maybe the Sastrugi Pakage by @Ewan_Opie can be of help

Create a point with the average of the four X, Y and Z coordinates

The actual code would depend on the structure of the data, but hope the line below gives you an idea


Thanks for your replies… I’ve running with Vikram’s suggestion first-off. This works perfectly when run against a toposurface with manually placed points, as I have control over the order that the points have been created (i.e. consecutively around each survey point).

In an automatically created toposurface the points are not created in this way. Any ideas how I would gather the four topo points that have been automatically generated around each survey point? I guess this is where things start to get tricky. Something to do with proximity to each other? But more complicated when survey points are close to each other…

For further clarity, these are the points that have been manually placed (consecutive ID’s):
And these are the automatically created ones (non-consecutive ID’s):

I would be better if you could extract the points with their grouping/association intact. For example extract the lines, if possible and obtain the start and end points.

See if you could provide a sample file.

Yes that makes sense. A sample file of the survey? I’ve attached a chopped-down version of one of our survey 3D DWG’s. The layer with the relevant height information is called ‘HEIGHTS’.
DYN-TEST-2020_ToposurfacePoints.dwg (183.0 KB)

Extracted Data from the dwg file into a csv (Rename the extension of the file below to .csv)
DYN-TEST-2020_ToposurfacePoints.txt (85.2 KB)

Use the length of the lines (375) to filter out the desired lines and get the mid point and prune duplicates.
topo.dyn (30.5 KB)

This is looking really hopeful. Thanks so much for all this. I had to tweak the design tail-end of your graph as the design-script wasn’t doing what it was supposed to (minimal knowledge design script). The graph is working - I don’t know why the Watch 3D node isn’t working.

Just one more thing (hopefully) is that I don’t know how to export the data from the DWG.

1 Like

… but I am trying :grinning:

OK, I got that bit, and the toposurface is created, but in the wrong location. Any ideas how to make it land in the same place as the DWG link in the Revit model?
So close…

… so demanding

Just drag it into place, it’s just one Topo
You only need a few mouse clicks
Or spend hours on figuring out how the Geometry.Transform node works
Could be useful one day, the Genius Loci package is useful here

1 Like

Yeah you’re right. I’ll do that for now until I work out how to automate it. Thanks.

1 Like

I refined the export to CSV from AutoCAD to include only the elements I was interested and ran the script on the full survey DWG. It took 40 minutes to generate the 5085 topo points. Quite a while, but still a massive improvement on the 20,000+ points that I’d be wrestling with otherwise.
Thanks so much for all your help.

mini-update - I pruned the CSV down the absolute bare minimum data and it took only twenty minutes to process.
:partying_face: :partying_face: