Spencer Wright

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, try it out by downloading here!

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. You can see it yourself by downloading Element Free, but I wanted to briefly run down the changes here as well.

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.

Element Free

Over the past few months, we've been working hard on a free version of our Element lattice design software. Today, we're proud to announce that it's available for download immediately.

Element Free includes all of the most commonly used tools in Element Pro's lattice design suite, and allows engineers to quickly design surface and volume lattices with variable thickness. We'll be making improvements to Element Free (and adding more powerful features) over the coming months as we gear up for a full release of Element Pro. Head over to our Product page and enter your email address under "Element Free" to download the software!

Upcoming industry events

Just a quick public service announcement: the nTopology team will be at a few industry events in the coming months.

  • ASTM F42, 2016.01.25-27. We love learning from industry experts and helping direct process standards. If you're an F42 member, let us know!
  • Develop3D Live, 2016.03.31. Come to Warwick, UK and talk to the cream of the crop in CAD software.
  • AMUG, 2016.04.03-07. St. Louis! The biggest group of additive manufacturing users in the world. A *great* place to meet people working actively in AM, and trade process knowledge & expertise.
  • RAPID, 2016.05.17-19. North America's largest 3D printing event moves to Orlando. A great place to survey the industry and see what's coming up.

If you'll be attending any of these, we'd love to talk to you! Send a note and we'll set up time to chat.