nTopology @ SciTech 2019

Join us at AIAA SciTech 2019, the largest event for aerospace research, development, and technology in the world.

Stop by booth 712 to see nTop’s next generation design and optimization software in action. Learn how we're helping engineers make better parts and get the most out of advanced manufacturing.

We look forward to seeing you in San Diego from January 7th to 11th.

nTopology @ Formnext 2018


Join us at Formnext 2018, Europe’s premiere additive manufacturing exhibition.

Stop by booth 3.0 - H80 for a sneak peek of nTop’s next generation design and optimization software in action. Learn how we're helping engineers make better parts and get the most out of additive manufacturing.

We look forward to seeing you in Frankfurt from November 13 - 16.

nTopology Element & 3MF Beam Lattices

Today, we're proud and excited to announce that nTopology Element is the first piece of CAD software to offer full importing and exporting of 3MF's Beam Lattice extension, which was developed and ratified with nTopology's direct involvement.

As our customers know, STLs have significant disadvantages for representing lattice structures. Not only do they produce large file sizes, but they also result in reduced fidelity to the intended design and are difficult to edit and analyze. nTopology has a long history of offering customers a better option through our LTCX file format, and we are proud to have worked with our colleagues at the 3MF Consortium to standardize the Beam Lattice extension so that LTCX's functionality can be shared across the industry.

With 3MF Beam Lattices, users will see file that are up to 1/1000th the size of STLs, and will be able to transfer lattices with ease between nTopology Element and other enterprise-grade CAD software. 3MF Beam Lattices also allow boolean functions to be built into the file itself, making your workflow simpler and faster.

For more information on 3MF Beam Lattices, visit the 3MF website. To get in contact about how 3MF Beam Lattices can be used in nTopology Element to make your engineering workflow easier, contact us here

Thanks to our colleagues at the 3MF Consortium for working with us to improve this key part of the lattice design workflow!

nTopology on Tour


We're hitting the road this month and we'd love to connect . We'll be attending these upcoming events;

America Makes - Technical Review & Exchange

El Paso, Texas from March 14th and 15th.

Develop3D Live
Warwick, UK on March 20th

2018 AMUG Conference
St. Louis,  MO April 8-12, 2018

Rapid TCT 3D Printing Conference
Ft Worth, Texas from April 24-26

If you're in or around the area during those times, be sure to connect with us in person to learn more about the latest features of nTopology Element.

In addition to our upcoming events, we've recently been nominated for 3D Printing Software of the year by 3D Printing Industry. We would greatly appreciate a vote and spreading the word!

Element Pro Case Study: F1 Brake Pedal

Check out another Element case study written by one of our Application Engineers, Skand Mishra. Here, the goal is to significantly reduce the weight of a Formula 1 brake pedal design while still withstanding the given loading condition. SimSolid was used for the structural analysis - a simulation tool that analyzes fully featured parts and assemblies in minutes without meshing! Check it out at www.simsolid.com.

Click here to download full case study.

Screen Shot 2017-11-06 at 14.09.37 PM.png

Announcing Element 1.0

We've been hard at work developing some new and very powerful lattice design tools for the official release of Element 1.0. Check out some of these new features below, then try them out yourself in Element 1.0.

Single and Dual-Surface Conformal Lattices

Single and Dual-Surface Conformal Lattices

Create & tessellate rules that have surfaces

Create & tessellate rules that have surfaces

Drive lattice variability using Surface Modifiers

Drive lattice variability using Surface Modifiers

Change the topology of a mesh with the Remesh Tool

Change the topology of a mesh with the Remesh Tool

These features are only available to our Pro users. To schedule a 30-day trial of Element Pro, send us a note here!

Measuring in Element Pro

As we've been working on nTopology Element Pro's advanced features (mainly our FEA and DFM tools), a lot of users (including our friend Kenneth Nai) asked for a very simple enhancement: The ability to measure things in the scene.

So when Chris was looking for a two-sprint project to work on in early September, Mike mocked up a quick design for a Measuring utility. We kept it simple to start: We wanted to give users the ability to see locations and diameters of lattice nodes as well as the minimum distance between any two nodes.

Because of our lightweight, beam-and-node lattice graph representation (which is the basis for our open source LTCX file format), it's easy for us to calculate the precise distance between any two nodes in a complex lattice. For ease of use, we show the minimum distance between nodes - the space between them when they're thickened. As a plus, we also allow you to measure distance between unthickened nodes and even the vertices on a mesh (STL/OBJ).

We also used the same dimension design in the updated version of our Generate tool. Previously, it was difficult to tell how the "Scale" settings would affect lattice unit size. With this update, we show the size of the lattice right in the Generate tool's mini 3D view.

We'll be expanding the Measure utility over the next few months, allowing you to know more and more about your designs. Stay tuned!

Stochastic Structures

Recently we released Element Pro's fifth big feature: our Stochastic Structures module. This allows engineers to create random and pseudorandom lattices with tuned densities and pore sizes, and is targeted at applications in medical implants, chemical processing, and filtration.

The Stochastic tool is extremely versatile, allowing for variability in both lattice topology and beam thickness. To create the lattice, we generate random points inside the input part using a Poisson Disc Distribution. These points are then used to create Voronoi cells, which are then used to create lattice beams at each cell boundary (more stochastic units are coming soon; email us if you have specific needs). To generate a uniform lattice, simply choose a volumetric part and a target cell size and click the `Generate` button. The photos below show an end part that has uniform thickness of 2mm.

The Stochastic module can also create lattices with fully variable cell sizes. To do that, you just need a modifier in the scene to drive that variability. Here, we're creating a lattice whose cells vary between 5 and 15mm, and whose beams are a uniform 2mm diameter:

Just like all lattices in Element, stochastic lattices can also have variable thickness. Here are the same parts as above, with variable thickness applied. 

Note that the modifiers that drive cell size and beam thickness do NOT have to be the same. Here, we've created a variable topology off of `Modifier 2`, and used `Modifier 1` to drive beam thickness.

A thickened stochastic lattice's properties, showing volume and pore data.

Because these structures are often chosen for the way that they perform in fluids, we added a few new object properties to help you design just the part that you want. If you right click on a thickened stochastic structure, you can see that we calculate mean, minimum, and maximum cell sizes in the structure. We also show the approximate solid volume, from which you can estimate the part's final density without having to export an STL or OBJ. Note that this information is only available on thickened stochastic lattices, as we need the beam diameter information in order to calculate pore size and volume.

Using the techniques shown above, you can create printable random structures that have just the properties you want. Whether you're engineering for osseointegration (bone ingrowth) on a medical implant, creating parts with tuned surface area to volume ratios (SA:V), or working on filtration devices that catch particles in a very specific size range, stochastic structures are a great solution. They also have isotropic mass properties and their stiffness can be fine tuned just by varying density. And since they act just like any other lattices in nTopology Element, you can use the same editing, meshing, and analysis tools on them as well.

We've already seen great results from this tool, and will be making a few upgrades to it over the next few months. To schedule a demo and trial license, email us today! You can also see more of how the tool operates on its page in the Element Manual.

Element Free 0.13.0

Last week we released Element 0.13.0, which brought with it a few big improvements to our user interface. We think they'll help users learn the lattice design process much more quickly, and I wanted to run them down here.

This version of Element brings a whole new look to the toolbar layout! Gone are text-only buttons in the top bar, and in their place come descriptive icons in a (somewhat larger) ribbon. We hope this will add a bit of context to what the tools actually do, and it will also help us conserve valuable screen space as the number of tools expands over the next few months.

We also split the `Edit` tool up into its component parts - `Move`, `Merge/Split`, `Trim` and `Clean up`. This will reduce the number of clicks it takes to perform an operation, and makes the Edit family act a lot more like the other tools in Element. We'll be doing more work to rationalize our tools in the coming months, but don't worry - nothing's going away!

We made some improvements to the `VF Lattice` tool. The big change here is in the user interface; namely, the vectors act a bit more like our Point modifiers do, and are added and edited in a similar way to the `Modifiers` tool. We still have a few changes coming to this tool's UI and functionality - stay tuned :)

Lastly, we rolled the `File` and `Help` menus into one single menu in the top left corner. If you're looking for help, go there!

We've got even more improvements coming in the next few weeks - stay tuned! And if you haven't played with Element Free recently

Pressure vessel workflow

This post will take you through the CAD design of this pressure vessel. The vessel is composed of a solid outer shell reinforced with a lattice on the underside. With two halves bolting together to create the entire vessel, each screw hole is also reinforced with a lattice of its own.


Let’s say that I need to create an underwater vessel that can withstand relatively high pressure while maintaining low weight. The key to making my design work lies in lattice structures, and luckily there is a free software package called Element that, granted I have access to a metal 3D printer, gives me all the tools I need to complete the job. The pressure vessel we are going to 3D print will contain a thin skin, reinforced with lattices, and the first step in the process is to use CAD software and construct a model. As you can see, I’ve created an assembly in SolidWorks containing various parts of the vessel. It is important to note that at this stage in the design, the parts of the vessel which will later become lattices should be modeled as solid regions.

I save all the individual parts of the vessel as STL files. I do this so that I can turn necessary parts into lattices and then reconnect the lattices to the other parts of the structure. This is where it is important to illuminate a workflow hack that will make this process go much smoother. I make two versions of the parts I want to make lattices out of in SolidWorks. One version is slightly oversized, while the other is very oversized, on the faces that will connect to other parts. The reason why I have two variations will become evident as we move further along the process.

This post will be broken into sections, each containing the steps of my procedure accompanied by a gallery with corresponding pictures to help illustrate the process. Let’s get started.

Step 1: Generate
I import the very oversized STL file for the structure that represents the lattice reinforcing the underside of the pressure vessel into element. Using the generate lattice tool, I create the initial lattice structure - choosing the shape, size, and start point of the cells in my lattice. I click ’Generate’ and hit ‘Step’ a couple times to make sure that the entire solid is filled and then hit 'Trim' the trim the lattice to the size of the original part.

Step 2: Remove Open Beams
Due to the fact that I trimmed the lattice, there are now a bunch of open beams (open beams are beams that are either floating or connected on only one side) on the lattice structure. We don’t want these, especially on the inner side face of the lattice. To get rid of them, I open the ’Clean up’ tool and click ‘Select by valence’ with ‘Valence <= 1’. As displayed in the picture, Element highlights all of the open beams and I remove them by clicking ‘Delete’ and hitting ’Save lattice and close’. Removing open beams will ultimately reduce the size of the lattice structure because all of the beams that get deleted are on the surface of the lattice. This is precisely the reason why I started with a largely oversized part to construct the lattice.

Step 3: Trim
Now it is time to trim the oversized lattice to the slightly oversized profile. I select ‘Edit Lattice’ and click the ’Trim’ tab. From the dropdown menu select the slightly oversized part file and hit ’Trim’. As you may have predicted I have created more open beams. However, I designed the slightly bigger part to have the same inner dimensions as the much larger part to prevent creating more open beams on the inner face of the lattice. Therefore, the only open beams now exist on the outside of my lattice shell.  When it comes time to put all of the parts together in mesh mixing software, my lattice will be slightly too large on the face that will connect to the rest of the vessel. Consequently, when I boolean the parts together, I am guaranteed that all of the open beams will make contact with the shell of vessel and that a solid connection will be made.

Step 4: Add Point Modifiers
Due to the nature of the problem, a cylindrical shell like vessel under uniform pressure is weakest along the cylindrical face. Given this, I want to make the lattice denser along those areas. I click the ’Modifiers’ tool and display the lattice I want to modify. I create a new class of modifiers and strategically place points around the lattice where I need it to be strengthened. Each point will apply variable thickness to the regions nearby on the lattice. I can alter the range of each point and change how the thickness gradient changes as I move away from it.

Step 5: Thicken
The only thing left to do it thicken the lattice. I do this by clicking the ‘Thicken Lattice’ tool and switching to the ’Variable’ tab. I chose the lattice I want to thicken, the modifier I would like to apply to it, and set the minimum and maximum beam diameters for the thickened lattice.

Step 6: Export
Click 'file' and export the lattice as an obj. file.

Next, I generate a lattice for the fins -- the part that reinforces the screw holes that connect the two halves of the pressure vessel. This process follows closely to that in the previous section; however, since the fin contains a mechanical feature (the screw hole), I must include a few additional steps. 

Step 1: Generate
Like in the previous, I start by generating a volume lattice from the largely oversized part. I trim the lattice, save and close.

Step 2: Generate Surface
Instead of removing open beams I import the screw face mesh and generate a surface lattice from it.

Step 3: Attract Lattice
Using the 'Move' tool, I attract nodes from the volume lattice to the screw face lattice. I can select a maximum valence (limitation of what nodes can be moved) and the snap distance (the maximum distance away from the attractor lattice the node can be). The nodes that will be moved under my specific parameters are highlighted when I press tab, and once I click ’Move selected nodes’ the volume lattice will be altered.

Step 4: Merge Lattices
Now that the nodes have been moved, I can merge the two lattices. Using the Merge/split tool, I am able to do this by selecting which two lattices to merge.

Step 5: Remove Open Beams, Trim, Add Modifiers, Thicken and Export
Now that I have merged, I can remove the open beams, trim to the slightly larger part profile, add the point modifier, variable thicken the lattice, and export it.

Now that my lattices have been created, the only thing left to do is to connect them to the other parts of the pressure vessel. There are many programs that will allow you to do this, and Netfabb happens to be a very good one. I simply import the files for the various parts into the software, trim the lattices a bit, and unite the parts into one. 

Step 1: Trim mesh to design space
As a consequence of thickening the lattice --which thickens in all directions -- it is now larger than the original design space. I use the intersect tool with the lattice and slightly oversized part to remove the extra material.

Step 2: Repeat
Perform the same intersect with the other lattice

Step 3: Apply rotation to fin
Using the rotation tool, I copy and rotate the fin to create all four fins.

Step 4: Unite outer shell
I use the unite tool to connect the inner lattice to the outer vessel shell.

Step 5: Unite connector and fins
Similarly, I unite the bottom fin connector and the fins to the now connected outer shell and inner lattice.

Thanks for your time!

Element Free 0.12.7

Last week we released a significant update to Element, our free lattice design software. In addition to a major change to our windowing system, we also changed the lattice generation workflow a bit and added the first Element Pro module.

One window

This is something we've been wanting to do for a long time: Element is now one window. For now, open tools appear as a sidebar on the right side of the 3D viewport, but in the near future we'll be resizing them individually to free up even more screen space.

Thickening vs. Meshing

In the back end, nTopology Element represents lattice structures as a list of nodes and a list of beams connecting them. When we create a thick lattice, we apply a diameter to every node, and then thicken the beams such that they have linear interpolation between the thicknesses of the nodes they're connected to. 

Until Element 0.12.7, though, our `Thicken Lattice` tool created mesh (similar to STL/OBJ) objects. Meshes describe lattices as many, many, small triangles, often resulting in file sizes in the hundreds of megabytes. This is okay for printing (most 3D printing build processors take in STL and OBJ files easily) but not very useful while you're designing the part. So with 0.12.7, we've split these two functions up - allowing you to thicken a lattice without bogging down your RAM and video card. You can experiment all you want with these thickened lattices to see what your part will look like, but only need to convert it to a mesh when you're ready to print.


I'm going to start with this: Element Free is still free, and it always will be. For advanced users, however, we're rolling out a series of Pro modules that add more functionality and flexibility. For these, we've implemented a new licensing system that allows us to enable Pro features for our paid customers.

If Element Free does everything that you need it to, this doesn't affect you at all! But if you're looking for more powerful design and analysis tools - and tighter interoperability with other CAD software - then you can browse our Pro modules here. When you're ready to take a trial, just click `Help > Licensing` and follow the instructions there.

NTLatticeGraph export

Our first Pro module offers the ability to import & export lattices in our open source, XML based file format (LTCX). This allows intrepid users to edit lattices outside of Element, and also lets you use beam analysis to analyze your lattice in your preferred FEA package. We're working hard to integrate LTCX into the leading AM build processor software, so you can skip the meshing step altogether and print right from a lightweight, stable file format. You can see the full LTCX file specification here.

Data collection

Starting in 0.12.7, we're collecting anonymized usage data about what tools are being used in Element. You can read our full EULA here, and can opt out of data collection by going to `Help > About`.

Coming in the next month

We're on a roll right now, and will be launching a handful of new Pro modules - and a bunch of improvements to Element Free - over the next month. To start, look out for a new and much more flexible way to generate surface lattices. We're also working on both offset thickening and conformal structures, and will be rolling out FEA, CAD interchange, our Rule builder, and more big features over the summer. We're *really* excited to see what you do with them - get in touch if you've got questions or want to schedule a trial of Element Pro!

Objects in Element

Since releasing our Element Free lattice design software, we've gotten a few notes asking for product documentation. While we were careful to include tooltips in Element Free (just hover over a button/text box to see them!), the truth is that we simply didn't have our documentation finished when we released Element Free.

This blog post - and the public GitHub repository where we'll be keeping our documentation as it develops - is our first step towards remedying that. As you'll see below, we're sharing a bit of our product roadmap as well. As a result - and because we expect some of the explanations below to spark new questions - this will inevitably be a living document. While this blog post will not be updated, we'll keep an up-to-date version on GitHub, here. Feel free to ask questions there!


The purpose of this document is to explain the core properties of the different object types that are used in nTopology Element. These objects are viewed here from the vantage point of a user, and this document is not a technical specification. Some aspects of this document will change over time as user needs (and Element's capabilities) evolve, but in general I've tried to represent both the current state of Element Objects and any anticipated extensions to them.

Objects overview

Element can generate and operate on five different Object classes:

  • Projects
  • Volumes
  • Surfaces
  • Rules
  • Lattices
  • Modifiers

Projects are Element's natural working environment. Volumes are generally interpreted as solid bodies. Rules define some system for generating lattices in 3D or 2D space. Lattices are 2D or 3D structures based (at least loosely) on a system of repeating beams, nodes, or volumes. Modifiers are used to change the properties of lattices and volumes.

This document isn't meant to describe in detail the workflow through Element, but I should note that we make a clear distinction between defining the topology of a lattice (which is represented today as a series of one dimensional points and lines in 3D space) and thickening that lattice (which today is done by generating a 3D mesh that surrounds the lattice beams). In other words: First you create an unthickened lattice, then you thicken it.


Projects are the topmost thing that Element deals with. When the user saves an .elem file, the entire project (and nothing else) is saved. Projects may contain any combination of Volumes, Surfaces, Rules, Lattices and Modifiers. It also seems conceivable that Projects might be able to (recursively) contain other Projects; this is probably a topic for further conversation.


The exact definition of a volume will change depending on the level of detail that you approach an object from; things that look solid from close up might look more like lattices as you zoom out. Generally, though, volumes have high mass relative to their bounding boxes - and in the context of Element's workflow, volumes are anything that you might use to define a lattice inside of.

In the long run, it's highly likely that we'll allow volumes to be represented with boundary representation geometry - and at least somewhat likely that we'd want to allow for voxel representations as well. Today, however, the only volume objects that Element supports are mesh bodies importable through STL or OBJ formats.

Because our core users are typically designing physical objects that will be manufactured and put into service in larger assemblies, volumes will very frequently have some surfaces which represent important mechanical features. It's likely that our users will have defined properties of those mechanical features in their solid CAD packages, and ideally they would be easily importable into Element. Alternately, we'll probably want to offer some kind of feature recognition and definition into our software.

Volumes have their own coordinate system and (possibly implicit, as in the case of STL) system of measurement; it would be helpful if Element allowed users to translate, rotate, and scale those properties within the Element Project's coordinate space. That has not been implemented to date, however. Currently, when a user imports a volume its coordinate system is locked and coincident with the project coordinate system.


Surfaces define geometry in two dimensions. Currently, nTopology Element supports mesh surfaces; it stands to reason that we would want to add other CAD surfaces in the future. For many users, surfaces are simply a way to represent the Volumes that they enclose; others will use surfaces to generate lattices using Face or Beam rules.

Because of the fact that Element only generates surface lattices based on the input mesh topology, Surface objects aren't really treated as a distinct thing currently. Instead, we the user can interact with meshes in two different ways - as either a surface or a volume. This is generally fine, but it's also useful (as a user) to distinguish between whether you're treating the input geometry as one or the other - and within nTopology Element Free, the two require different workflows and approaches.


Rules define the topology of a lattice. Rules consist of two properties: Tessellation and Unit. These terms aren't referenced explicitly in Element Free, but the user can view them in the rule preview window of the Generate Lattice tool. There, Tessellations are shown with black and grey lines, and Units are shown in red lines.

I should note that the concept of a "rule set" (which existed in Element Pro Beta but is not included in Element Free) doesn't seem particularly useful to me at this point, though that probably warrants further discussion.


Tessellation describe the method by which the Unit (which is abstract and not part of the design per se) is instantiated in the design space. Conceptually, Tessellations fall into three categories, though Element Free doesn't explicitly distinguish between them.


Volumetric Tessellations are generated directly in 3D space, and are based on 3D geometries. For instance, a (regular) hex prism tessellation fills space by nesting identical hex prisms next to and on top of each other. There are also semiregular Volumetric Tessellations (such as Oct-Tet) and irregular Volumetric Tessellations (such as Voronoi and A15). Element Pro Beta contained all three of these; Element Free contains only regular and semiregular.


Face Tessellations arrange units based on 2D (Euclidean or non Euclidean) geometries. They look at the surface of a part and create lattice structures based on that surface's topology. Face Tessellations were used extensively in nTopology's early textile work. Some of them look only at a single mesh face at a time, and others might look at patterns of faces. It should be noted that today, Face Tessellations operate directly on the faces of a mesh (STL/OBJ). It is our intention to extend Face Tessellations to BREP inputs, though it's likely that that workflow will involve an intermediate step that's similar to a mesh.


Beam Tessellations arrange units based on 1D structures - lines, located in 3D space. nTopology Element Free's "surface lines" rule is the simplest version of a Beam Tessellation, as it creates a lattice beam that's coincident with every edge of the input mesh.


Units describe what lattice topology is propagated throughout the Tessellation. Today, nTopology Element Free supports ONLY line Units. It's likely that in the future we would support Spline Units, and possibly surface and volume units as well.

Regardless: A Unit maps some features (lines for now and possibly splines etc in the future) to the Tessellation.


Currently, lattices are made up of two things: nodes and beams. Nodes have locations in XYZ space, and beams connect two nodes.

It is our plan to extend nodes to have an additional property: diameter. Beams will also be extended to have a transition property, which will control how their thicknesses vary across their length. To start, I think we should only support one transition value - linear. Hence, beams whose nodes have different diameters will take the shape of a conical frustum. At some point in the future it might make sense to add other properties - I'm thinking in particular of alternate transitions, some of which might take additional diameter values.

It's also conceivable that we'd want to allow for lattices that are based on the aforementioned (potential) spline, surface, and volume rules. To the user these would seem similar (identical?) to standard beam lattices, though it seems possible that they would be operated on by a different set of functions.


Currently, modifiers can contain only points. Points have XYZ locations, ranges, and falloff curves. Point modifiers can currently be used to control beam thickness of a lattice, but as we showed in Pro Beta they can also be used to control lattice topology. I will note, however, that the way that we dealt with modifiers & topology was a bit limited. It makes sense to allow, for instance, volume lattices to be generated within a volume but only within some range of a point modifier. Ditto surface lattices; there's no reason why we can't generate surface lattices only within a certain area. I think we should make these extensions in the near future.

In addition to point modifiers, Pro Beta used FEA to generate scalar field modifiers. These act in a similar way as point modifiers do, but they operate in a shaped (voxel) region rather than radiating from a single point. Again, it makes sense that scalar field modifiers should be able to control variable thickness, topology, and whether or not a lattice is generated in the first place.

I believe that we should also consider modifiers that aid in design for manufacturing. These would consist of an orientation and a number of rules that improve printability. It also stands to reason that we would treat any input from FEA as a modifier, though I'm not sure that they should operate in the same ways that our earlier implementation did.