Leica / Trimble scanner -- Trimble Real Works -- Landxml -- Tekla Structures
But what if we don't have Real Works? Basically, we want to create geometry from point cloud (which we can make into a massive list of XYZ values in a text file). Sounds like an easy job for Dynamo... and in a way, it is.
Here is what worked for me:
- Import the source point cloud to Recap, decimate to 100mm grids, and remove all values except X,Y,Z (screencast below). This took me from about 19 million points down to about half a million
- Export from Recap to PTS format.
- Remove first line in the PTS file using Notepad++ (if necessary). The output should look something like this:
Here is the Screencast:
Note: steps 1 to 3 should essentially create a 3 field space delimited XYZ text file with no Intensity, RGB or Normals (sometimes called NEZ by survey people)
- Load some family called PointCloud.rfa with a Type called Point (can be adaptive or not)
- Use a Dynamo definition to place a given family at each location.
One of my main concerns was scalability.. How many points / instances can Dynamo and Revit handle here? Initially, I used a method where the definition itself threw away a lot of points in a totally arbitrary manner, using a series of DropItemAtIndex nodes. This got me from about 500000 to about 120000 points, and this worked ok. I ended up modifying the node to allow for a number of 'drops' (from 0 to 4). Each drop throws away every second point... Finally, as I was getting all the points anyway, I thought it would be nice to have a Topography creation option. The published package can either create families at each point, make a topography, or both.
- Once you have generated the geometry you want from the point cloud, then Export to DWG or DXF
- Transmit to consultant
When you first load the package, you should set up the entry data types as per below:
If your text file is space-delimited (as mine was), make sure the delimiter string field actual has a Space in it.
Also, set the two booleans to False (meaning that no families or topos will be created) for the first Run, and set the drops to 4. The "Number of points" output node will give you an idea of how many points are in play at that particular drop level, like this:
If you are running on 'normal' system hardware, you probably should keep it to around 50000 geometry creation points if possible. On my Surface Pro 3, it could work with the 30000 points no worries, and my workstation could handle 120000 ok. So, once you have a reasonable number in that output box, you can set the go and place instances and / or make a Topo options to True. I think Revit may struggle with huge points on a Topo, but I was able to place the family instances (with a small crosshair or 3D sphere at the origin) and then export to DWG.
Keep in mind this is a very arbitrary and lossy method - point clouds were never really meant to be wrestled into geometry like this. However, it may help you in certain situations. The Dynamo node has been published but it is very beta at the moment, so of course the usual disclaimer applies: "use at your own risk".
Package is called Place Family Instances or Make Topography by Point Cloud.
Sample point family for download
A note on coordinates and rounding:
This tool currently uses project coordinates. A future revision may offer shared coordinate translation. In the meantime, you could use some reference geometry at project base point and run this tool in an new empty, linked file, then move it into place in project. Related discussion:
Also, it appears that rounding is occurring to 3 decimal places, which is not ideal. Again, this may be fixed in future.
I tried lots of other methods, including POINTSIN and IMPORTXYZ lisp routines in AutoCAD, but oftentimes the dataset was too big, or the input data was not what the routine was expecting.
Some other methods I attempted are below, but they weren't too successful...
- Import points to Civil3D
- Convert Civil COGO points to vanilla AutoCAD blocks
- Use blocks to generate geometry
- Points into Civil3D (as Drawing Objects in a Surface)
- Export Surface to LandXML