There’s an old saying that I’m sure you’ve heard that goes “you won’t know until you try”. While it’s one of those phrases that’s been around long before computers were in every office, it remains modern enough to be very relevant to working with software. I found myself thinking about this phrase when a client asked if they could have a Civil 3D surface printed on our 3D Printer, a 3D Systems CJP Project 660Pro.
It may sound obvious, but the only prerequisite for printing anything in 3D is that the object has a width, depth, and height. A Civil 3D surface object, while made up of X, Y, and Z points, is only a two-dimensional object since it has no thickness. The first hurdle would then be to add some “thickness” or height to that surface to make it printable.
If you are a Civil 3D user you may think, “well that’s easy, just use the Extract Solids from Surface”. And while that is exactly what crossed my mind when I started thinking about how to print a Civil 3D surface, it turns out that the Extract Solids from Surface does not work for very complex geometries. This command is great for extracting out solids from corridors and smaller surfaces, but it couldn’t generate a solid for a heavily graded 70-acre subdivision with 100’ of elevation difference between its low and high points.
As I didn’t have rights to use the surface described above when writing this blog, I am instead using another surface to illustrate the steps. For all intents and purposes, these steps will work for any surface.
Met with failure, I turned to 3ds Max, the most powerful geometry editing software in the AEC Collection. I had many options to choose from when importing the Civil 3D surface into 3ds Max, but I narrowed it down to two options.
The first option would use Civil View to exchange Civil 3D object data with 3ds Max using a VSP3D file. The second option is to export a LANDXML file from Civil 3D and then import that file into 3ds Max.
I ended up choosing the latter option since it automatically generated polygons in the various HIDE boundaries found on the Civil 3D surface I was using. While I lost a marginal amount of fidelity from the original surface, using LANDXML created a gapless surface which we preferred for the 3D Print.
Exporting a LANDXML file from Civil 3D is as easy as right-clicking the surface in the Prospector and selecting Export LandXML… Importing the LANDXML file into 3ds Max is equally simple; click on the File menu, choose Import and select the LANDXML file. You should uncheck Smooth Surface in the Object Creation Options to preserve the Civil 3D surface geometry.
Unlike the Extract Solids from Surface command in Civil 3D, I simply had to create a watertight poly surface or mesh in 3ds Max. A watertight model is defined as an object that doesn’t have any naked edges. McNeel’s website makes a great analogy when defining a watertight object; “another way to understand a solid is to see it as a balloon. If there is even a pin prick size hole, it will deflate. Thus it is not air/watertight, not volumetric. A solid is a volume. A solid is its outer surfaces, once they are completely joined”
The LANDXML import provides me with a editable mesh in 3ds Max. To manipulate the geometries in the mesh to create the watertight solid I previously mentioned, follow these steps:
Despite the extensive list of steps, the process is straightforward if you are familiar with 3ds Max. The video below illustrates all these steps to make it easier to follow along.
Once the geometry has been edited to be watertight, export the geometry to an STL (STereoLithography) file. In order to send our 3D print jobs, we use an application called 3D Sprint. 3D Sprint can import the STL, check for any geometry errors, and scale the model so it can be printed. The screenshot below shows the 3ds Max geometry ready to be printed.